From 3a7f9cf922b038cbb038c340931e0e5cc9333784 Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Wed, 28 Nov 2012 01:54:15 +0200 Subject: [PATCH] Bug 811206, Fix JSHolder drop handling, part 1 (base), r=mccr8 --HG-- extra : rebase_source : 0ea98d9e542ebade36653661fe4e941a03b87781 --- content/base/src/nsContentUtils.cpp | 18 ++---------------- js/xpconnect/src/XPCJSRuntime.cpp | 8 ++++++++ 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/content/base/src/nsContentUtils.cpp b/content/base/src/nsContentUtils.cpp index f8109bd64d6..9587fb99fdb 100644 --- a/content/base/src/nsContentUtils.cpp +++ b/content/base/src/nsContentUtils.cpp @@ -4519,28 +4519,14 @@ nsContentUtils::HoldJSObjects(void* aScriptObjectHolder, { NS_ENSURE_TRUE(sXPConnect, NS_ERROR_UNEXPECTED); - nsresult rv = sXPConnect->AddJSHolder(aScriptObjectHolder, aTracer); - NS_ENSURE_SUCCESS(rv, rv); - - if (sJSGCThingRootCount++ == 0) { - nsLayoutStatics::AddRef(); - } - NS_LOG_ADDREF(sXPConnect, sJSGCThingRootCount, "HoldJSObjects", - sizeof(void*)); - - return NS_OK; + return sXPConnect->AddJSHolder(aScriptObjectHolder, aTracer); } /* static */ nsresult nsContentUtils::DropJSObjects(void* aScriptObjectHolder) { - NS_LOG_RELEASE(sXPConnect, sJSGCThingRootCount - 1, "HoldJSObjects"); - nsresult rv = sXPConnect->RemoveJSHolder(aScriptObjectHolder); - if (--sJSGCThingRootCount == 0) { - nsLayoutStatics::Release(); - } - return rv; + return sXPConnect->RemoveJSHolder(aScriptObjectHolder); } #ifdef DEBUG diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.cpp index 1bb006b091a..aadfccb91b5 100644 --- a/js/xpconnect/src/XPCJSRuntime.cpp +++ b/js/xpconnect/src/XPCJSRuntime.cpp @@ -250,7 +250,11 @@ nsresult XPCJSRuntime::AddJSHolder(void* aHolder, nsScriptObjectTracer* aTracer) { MOZ_ASSERT(aTracer->Trace, "AddJSHolder needs a non-null Trace function"); + bool wasEmpty = mJSHolders.Count() == 0; mJSHolders.Put(aHolder, aTracer); + if (wasEmpty && mJSHolders.Count() == 1) { + nsLayoutStatics::AddRef(); + } return NS_OK; } @@ -258,7 +262,11 @@ XPCJSRuntime::AddJSHolder(void* aHolder, nsScriptObjectTracer* aTracer) nsresult XPCJSRuntime::RemoveJSHolder(void* aHolder) { + bool hadOne = mJSHolders.Count() == 1; mJSHolders.Remove(aHolder); + if (hadOne && mJSHolders.Count() == 0) { + nsLayoutStatics::Release(); + } return NS_OK; }