From 07e03ec7144d6bc965eaa8c4c198bb64e542a4da Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Wed, 10 Jan 2018 09:47:07 +0200 Subject: [PATCH] Bug 1429244 - Make Selection to use main thread only AddRef/Release, r=mccr8 --- dom/base/Selection.cpp | 4 ++-- xpcom/base/nsISupportsImpl.h | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/dom/base/Selection.cpp b/dom/base/Selection.cpp index 39721a3b3ddb..fb6325f24a83 100644 --- a/dom/base/Selection.cpp +++ b/dom/base/Selection.cpp @@ -823,8 +823,8 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Selection) NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISelection) NS_INTERFACE_MAP_END -NS_IMPL_CYCLE_COLLECTING_ADDREF(Selection) -NS_IMPL_CYCLE_COLLECTING_RELEASE(Selection) +NS_IMPL_MAIN_THREAD_ONLY_CYCLE_COLLECTING_ADDREF(Selection) +NS_IMPL_MAIN_THREAD_ONLY_CYCLE_COLLECTING_RELEASE(Selection) const RangeBoundary& Selection::AnchorRef() diff --git a/xpcom/base/nsISupportsImpl.h b/xpcom/base/nsISupportsImpl.h index 459d43ffd498..4fced88de02a 100644 --- a/xpcom/base/nsISupportsImpl.h +++ b/xpcom/base/nsISupportsImpl.h @@ -828,6 +828,21 @@ NS_IMETHODIMP_(void) _class::DeleteCycleCollectable(void) \ delete this; \ } +#define NS_IMPL_MAIN_THREAD_ONLY_CYCLE_COLLECTING_RELEASE(_class) \ +NS_IMETHODIMP_(MozExternalRefCountType) _class::Release(void) \ +{ \ + MOZ_ASSERT(int32_t(mRefCnt) > 0, "dup release"); \ + NS_ASSERT_OWNINGTHREAD(_class); \ + nsISupports *base = NS_CYCLE_COLLECTION_CLASSNAME(_class)::Upcast(this); \ + nsrefcnt count = mRefCnt.decr(base); \ + NS_LOG_RELEASE(this, count, #_class); \ + return count; \ +} \ +NS_IMETHODIMP_(void) _class::DeleteCycleCollectable(void) \ +{ \ + delete this; \ +} + // _LAST_RELEASE can be useful when certain resources should be released // as soon as we know the object will be deleted. #define NS_IMPL_MAIN_THREAD_ONLY_CYCLE_COLLECTING_RELEASE_WITH_LAST_RELEASE(_class, _last) \