From ab84e1442bb7de01e19ca222ef3ffe0ce7bf176d Mon Sep 17 00:00:00 2001 From: Andrew McCreight Date: Thu, 2 Jan 2014 11:33:40 -0800 Subject: [PATCH] Bug 947336, part 1 - Make nsXPCWrappedJS::mOuter into a smart pointer. r=bholley --- js/xpconnect/src/XPCWrappedJS.cpp | 8 +++----- js/xpconnect/src/xpcprivate.h | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/js/xpconnect/src/XPCWrappedJS.cpp b/js/xpconnect/src/XPCWrappedJS.cpp index afc7757d9c37..e670a3cbbf9e 100644 --- a/js/xpconnect/src/XPCWrappedJS.cpp +++ b/js/xpconnect/src/XPCWrappedJS.cpp @@ -424,8 +424,7 @@ nsXPCWrappedJS::nsXPCWrappedJS(JSContext* cx, : mJSObj(aJSObj), mClass(aClass), mRoot(root ? root : MOZ_THIS_IN_INITIALIZER_LIST()), - mNext(nullptr), - mOuter(nullptr) + mNext(nullptr) { InitStub(GetClass()->GetIID()); @@ -501,10 +500,9 @@ nsXPCWrappedJS::Unlink() if (mOuter) { XPCJSRuntime* rt = nsXPConnect::GetRuntimeInstance(); if (rt->GCIsRunning()) { - nsContentUtils::DeferredFinalize(mOuter); - mOuter = nullptr; + nsContentUtils::DeferredFinalize(mOuter.forget().get()); } else { - NS_RELEASE(mOuter); + mOuter = nullptr; } } } diff --git a/js/xpconnect/src/xpcprivate.h b/js/xpconnect/src/xpcprivate.h index bada56f7b763..e4f295db5aa7 100644 --- a/js/xpconnect/src/xpcprivate.h +++ b/js/xpconnect/src/xpcprivate.h @@ -2515,7 +2515,7 @@ public: "Only one aggregated native can be set"); return; } - NS_ADDREF(mRoot->mOuter = aNative); + mRoot->mOuter = aNative; } void TraceJS(JSTracer* trc); @@ -2538,7 +2538,7 @@ private: nsXPCWrappedJSClass* mClass; nsXPCWrappedJS* mRoot; nsXPCWrappedJS* mNext; - nsISupports* mOuter; // only set in root + nsCOMPtr mOuter; // only set in root }; /***************************************************************************/