From: Adeel Kazmi Date: Tue, 2 Nov 2021 18:56:41 +0000 (+0000) Subject: Ensure a FrameCallback is removed properly from a FrameCallbackInterface X-Git-Tag: dali_2.0.51~2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-core.git;a=commitdiff_plain;h=6eaf6fcb31f39372b92d7578786042edca55398b Ensure a FrameCallback is removed properly from a FrameCallbackInterface Change-Id: Ib24a383db0512ea757e06137433aef9419b84a5b --- diff --git a/dali/internal/update/manager/scene-graph-frame-callback.cpp b/dali/internal/update/manager/scene-graph-frame-callback.cpp index 924e7e9..6e1bd5e 100644 --- a/dali/internal/update/manager/scene-graph-frame-callback.cpp +++ b/dali/internal/update/manager/scene-graph-frame-callback.cpp @@ -42,13 +42,7 @@ FrameCallback::~FrameCallback() mUpdateProxy->GetRootNode().RemoveObserver(*this); } - { - Mutex::ScopedLock lock(mMutex); - if(mFrameCallbackInterface) - { - FrameCallbackInterface::Impl::Get(*mFrameCallbackInterface).DisconnectFromSceneGraphObject(); - } - } + Invalidate(); } void FrameCallback::ConnectToSceneGraph(UpdateManager& updateManager, TransformManager& transformManager, Node& rootNode) @@ -70,7 +64,7 @@ bool FrameCallback::Update(BufferIndex bufferIndex, float elapsedSeconds, bool n } Mutex::ScopedLock lock(mMutex); - if(mFrameCallbackInterface) + if(mFrameCallbackInterface && mValid) { Dali::UpdateProxy updateProxy(*mUpdateProxy); mFrameCallbackInterface->Update(updateProxy, elapsedSeconds); @@ -83,10 +77,11 @@ bool FrameCallback::Update(BufferIndex bufferIndex, float elapsedSeconds, bool n void FrameCallback::Invalidate() { Mutex::ScopedLock lock(mMutex); - if(mFrameCallbackInterface) + if(mFrameCallbackInterface && mValid) { FrameCallbackInterface::Impl::Get(*mFrameCallbackInterface).DisconnectFromSceneGraphObject(); - mFrameCallbackInterface = nullptr; + mValid = false; + // Do not set mFrameCallbackInterface to nullptr as it is used for comparison checks by the comparison operator } } diff --git a/dali/internal/update/manager/scene-graph-frame-callback.h b/dali/internal/update/manager/scene-graph-frame-callback.h index f09befa..4d3a061 100644 --- a/dali/internal/update/manager/scene-graph-frame-callback.h +++ b/dali/internal/update/manager/scene-graph-frame-callback.h @@ -132,6 +132,7 @@ private: Mutex mMutex; std::unique_ptr mUpdateProxy{nullptr}; ///< A unique pointer to the implementation of the UpdateProxy. FrameCallbackInterface* mFrameCallbackInterface; + bool mValid{true}; ///< Set to false when Invalidate() is called. }; /**