[Tizen] (Vector) Fix event trigger issue 97/239497/1 accepted/tizen/unified/20200729.165641 accepted/tizen/unified/20200731.145740 submit/tizen/20200727.071635 submit/tizen/20200728.012923 submit/tizen/20200731.001840
authorHeeyong Song <heeyong.song@samsung.com>
Wed, 22 Jul 2020 05:24:54 +0000 (14:24 +0900)
committerHeeyong Song <heeyong.song@samsung.com>
Mon, 27 Jul 2020 07:08:56 +0000 (16:08 +0900)
Reset the pointer of the event callback

Change-Id: I50467c7d9bae08e5dc3c062d21eccca226fd3f7e

dali-extension/vector-animation-renderer/tizen-vector-animation-manager.cpp

index 97668c8..13deede 100755 (executable)
@@ -56,12 +56,16 @@ void TizenVectorAnimationManager::AddEventHandler( TizenVectorAnimationEventHand
       Adaptor::Get().RegisterProcessor( *this );
     }
 
-    if( !mEventTrigger )
+    mEventHandlers.push_back( &handler );
+
     {
-      mEventTrigger = std::unique_ptr< EventThreadCallback >( new EventThreadCallback( MakeCallback( this, &TizenVectorAnimationManager::OnEventTriggered ) ) );
-    }
+      Dali::Mutex::ScopedLock lock( mMutex );
 
-    mEventHandlers.push_back( &handler );
+      if( !mEventTrigger )
+      {
+        mEventTrigger = std::unique_ptr< EventThreadCallback >( new EventThreadCallback( MakeCallback( this, &TizenVectorAnimationManager::OnEventTriggered ) ) );
+      }
+    }
   }
 }
 
@@ -71,16 +75,18 @@ void TizenVectorAnimationManager::RemoveEventHandler( TizenVectorAnimationEventH
   if( iter != mEventHandlers.end() )
   {
     mEventHandlers.erase( iter );
+  }
 
-    if( mEventHandlers.empty() )
-    {
-      if( Adaptor::IsAvailable() )
-      {
-        Adaptor::Get().UnregisterProcessor( *this );
-      }
+  bool releaseEventTrigger = false;
 
-      mEventTrigger.release();
+  if( mEventHandlers.empty() )
+  {
+    if( Adaptor::IsAvailable() )
+    {
+      Adaptor::Get().UnregisterProcessor( *this );
     }
+
+    releaseEventTrigger = true;
   }
 
   {
@@ -91,6 +97,11 @@ void TizenVectorAnimationManager::RemoveEventHandler( TizenVectorAnimationEventH
     {
       mTriggeredHandlers.erase( triggeredHandler );
     }
+
+    if( releaseEventTrigger )
+    {
+      mEventTrigger.reset();
+    }
   }
 }
 
@@ -102,7 +113,10 @@ void TizenVectorAnimationManager::TriggerEvent( TizenVectorAnimationEventHandler
   {
     mTriggeredHandlers.push_back( &handler );
 
-    mEventTrigger->Trigger();
+    if( mEventTrigger )
+    {
+      mEventTrigger->Trigger();
+    }
   }
 }