To prevent segmentation fault in AnimatedVectorImageVisual 76/303976/1
authorseungho baek <sbsh.baek@samsung.com>
Mon, 8 Jan 2024 11:41:59 +0000 (20:41 +0900)
committerseungho baek <sbsh.baek@samsung.com>
Mon, 8 Jan 2024 13:02:59 +0000 (22:02 +0900)
Change-Id: I4c5c94eb9faeffd4727b5879254527692fe93be2
Signed-off-by: seungho baek <sbsh.baek@samsung.com>
dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp

index 4cde154..ca65458 100644 (file)
@@ -192,9 +192,12 @@ bool VectorAnimationTask::Load(bool synchronousLoading)
   {
     DALI_LOG_ERROR("VectorAnimationTask::Load: Load failed [%s]\n", mImageUrl.GetUrl().c_str());
     mLoadRequest = false;
-    if(!synchronousLoading && mLoadCompletedCallback)
     {
-      mVectorAnimationThread.AddEventTriggerCallback(mLoadCompletedCallback.get());
+      ConditionalWait::ScopedLock lock(mConditionalWait);
+      if(!synchronousLoading && mLoadCompletedCallback)
+      {
+        mVectorAnimationThread.AddEventTriggerCallback(mLoadCompletedCallback.get());
+      }
     }
 #ifdef TRACE_ENABLED
     if(gTraceFilter && gTraceFilter->IsTraceEnabled())
@@ -216,9 +219,12 @@ bool VectorAnimationTask::Load(bool synchronousLoading)
   mFrameDurationMicroSeconds = MICROSECONDS_PER_SECOND / mFrameRate;
 
   mLoadRequest = false;
-  if(!synchronousLoading && mLoadCompletedCallback)
   {
-    mVectorAnimationThread.AddEventTriggerCallback(mLoadCompletedCallback.get());
+    ConditionalWait::ScopedLock lock(mConditionalWait);
+    if(!synchronousLoading && mLoadCompletedCallback)
+    {
+      mVectorAnimationThread.AddEventTriggerCallback(mLoadCompletedCallback.get());
+    }
   }
 
   DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::Load: file = %s [%d frames, %f fps] [%p]\n", mImageUrl.GetUrl().c_str(), mTotalFrame, mFrameRate, this);