(Vector) Fix event trigger issue 38/239138/2
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 04:59:32 +0000 (13:59 +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();
+    }
   }
 }