aboutsummaryrefslogtreecommitdiff
path: root/www/waterfox/files/patch-bug1425930
diff options
context:
space:
mode:
Diffstat (limited to 'www/waterfox/files/patch-bug1425930')
-rw-r--r--www/waterfox/files/patch-bug142593066
1 files changed, 0 insertions, 66 deletions
diff --git a/www/waterfox/files/patch-bug1425930 b/www/waterfox/files/patch-bug1425930
deleted file mode 100644
index ca6d6af5e015..000000000000
--- a/www/waterfox/files/patch-bug1425930
+++ /dev/null
@@ -1,66 +0,0 @@
-commit dc0965023fb7
-Author: Randell Jesup <rjesup@jesup.org>
-Date: Mon May 21 15:30:35 2018 -0400
-
- Bug 1425930 - Handle Broadcast()->Notify() calling RemoveObserver(). r=froydnj, a=abillings
-
- --HG--
- extra : source : a314710b0acd38afc7de74f0306f514b50d84463
----
- xpcom/ds/Observer.h | 28 ++++++++++++++++++++++++----
- 1 file changed, 24 insertions(+), 4 deletions(-)
-
-diff --git xpcom/ds/Observer.h xpcom/ds/Observer.h
-index 958e5e4a9694e..83d650a936ccc 100644
---- xpcom/ds/Observer.h
-+++ xpcom/ds/Observer.h
-@@ -57,7 +57,17 @@ public:
- */
- bool RemoveObserver(Observer<T>* aObserver)
- {
-- return mObservers.RemoveElement(aObserver);
-+ if (mObservers.RemoveElement(aObserver)) {
-+ if (!mBroadcastCopy.IsEmpty()) {
-+ // Annoyingly, someone could RemoveObserver() an item on the list
-+ // while we're in a Broadcast()'s Notify() call.
-+ auto i = mBroadcastCopy.IndexOf(aObserver);
-+ MOZ_ASSERT(i != mBroadcastCopy.NoIndex);
-+ mBroadcastCopy[i] = nullptr;
-+ }
-+ return true;
-+ }
-+ return false;
- }
-
- uint32_t Length()
-@@ -65,17 +75,27 @@ public:
- return mObservers.Length();
- }
-
-+ /**
-+ * Call Notify() on each item in the list.
-+ * Handles the case of Notify() calling RemoveObserver()
-+ */
- void Broadcast(const T& aParam)
- {
-- nsTArray<Observer<T>*> observersCopy(mObservers);
-- uint32_t size = observersCopy.Length();
-+ MOZ_ASSERT(mBroadcastCopy.IsEmpty());
-+ mBroadcastCopy = mObservers;
-+ uint32_t size = mBroadcastCopy.Length();
- for (uint32_t i = 0; i < size; ++i) {
-- observersCopy[i]->Notify(aParam);
-+ // nulled if Removed during Broadcast
-+ if (mBroadcastCopy[i]) {
-+ mBroadcastCopy[i]->Notify(aParam);
-+ }
- }
-+ mBroadcastCopy.Clear();
- }
-
- protected:
- nsTArray<Observer<T>*> mObservers;
-+ nsTArray<Observer<T>*> mBroadcastCopy;
- };
-
- } // namespace mozilla