From 8832fbf53cf71d4d4cb53986d9cfc024edd2bf1f Mon Sep 17 00:00:00 2001 From: tsepez Date: Thu, 8 Sep 2016 10:25:55 -0700 Subject: Replace CJS_Runtime::Observer with CFX_Runtime::Observer Previously, the observer set a flag which conditionalized a null pointer return. Now, we just clear the pointer. Destruction order matters, so add a method to trigger notifications. Review-Url: https://codereview.chromium.org/2322743002 --- core/fxcrt/include/cfx_observable.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'core/fxcrt') diff --git a/core/fxcrt/include/cfx_observable.h b/core/fxcrt/include/cfx_observable.h index b669e0d3d5..99a9951284 100644 --- a/core/fxcrt/include/cfx_observable.h +++ b/core/fxcrt/include/cfx_observable.h @@ -45,10 +45,7 @@ class CFX_Observable { CFX_Observable() {} CFX_Observable(const CFX_Observable& that) = delete; - ~CFX_Observable() { - for (auto* pObserver : m_Observers) - pObserver->OnDestroy(); - } + ~CFX_Observable() { NotifyObservers(); } void AddObserver(Observer* pObserver) { ASSERT(!pdfium::ContainsKey(m_Observers, pObserver)); m_Observers.insert(pObserver); @@ -57,6 +54,11 @@ class CFX_Observable { ASSERT(pdfium::ContainsKey(m_Observers, pObserver)); m_Observers.erase(pObserver); } + void NotifyObservers() { + for (auto* pObserver : m_Observers) + pObserver->OnDestroy(); + m_Observers.clear(); + } CFX_Observable& operator=(const CFX_Observable& that) = delete; private: -- cgit v1.2.3