Fix memory leak 91/239691/1
authorHeeyong Song <heeyong.song@samsung.com>
Wed, 29 Jul 2020 04:24:10 +0000 (13:24 +0900)
committerHeeyong Song <heeyong.song@samsung.com>
Wed, 29 Jul 2020 04:24:12 +0000 (13:24 +0900)
Delete TimerCallback

Change-Id: I36ffddcb3668580095b0491876fe04a395ba5822

dali/internal/legacy/common/tizen-platform-abstraction.cpp
dali/internal/legacy/common/tizen-platform-abstraction.h

index 4d60fee..104c07b 100644 (file)
@@ -43,7 +43,7 @@ struct TizenPlatformAbstraction::TimerCallback : ConnectionTracker
 {
   Dali::Timer mTimer;
   TizenPlatformAbstraction* mOwner;
-  CallbackBase* mCallback;
+  std::unique_ptr< CallbackBase > mCallback;
   const uint32_t mIdNumber;
 
   static uint32_t sNextTimerId;
@@ -51,12 +51,15 @@ struct TizenPlatformAbstraction::TimerCallback : ConnectionTracker
   TimerCallback(TizenPlatformAbstraction* owner, CallbackBase* callback, uint32_t ms)
   : mTimer(Dali::Timer::New(ms)),
     mOwner(owner),
-    mCallback(callback),
-    mIdNumber(sNextTimerId++)
+    mCallback( std::unique_ptr< CallbackBase >( callback ) ),
+    mIdNumber(++sNextTimerId)
   {
     mTimer.TickSignal().Connect( this, &TimerCallback::Tick );
     mTimer.Start();
   }
+  ~TimerCallback()
+  {
+  }
 
   bool Tick()
   {
@@ -194,7 +197,7 @@ uint32_t TizenPlatformAbstraction::StartTimer( uint32_t milliseconds, CallbackBa
   TimerCallback* timerCallbackPtr = new TimerCallback(this, callback, milliseconds);
 
   // Stick it in the list
-  mTimerPairsWaiting.push_back(timerCallbackPtr);
+  mTimerPairsWaiting.push_back( std::unique_ptr< TimerCallback >( timerCallbackPtr ) );
 
   return timerCallbackPtr->mIdNumber;
 }
@@ -203,7 +206,7 @@ void TizenPlatformAbstraction::CancelTimer ( uint32_t timerId )
 {
   auto iter = std::remove_if(
     mTimerPairsWaiting.begin(), mTimerPairsWaiting.end(),
-    [&timerId]( TimerCallback* timerCallbackPtr )
+    [&timerId]( std::unique_ptr< TimerCallback >& timerCallbackPtr )
     {
       if( timerCallbackPtr->mIdNumber == timerId )
       {
@@ -224,7 +227,9 @@ void TizenPlatformAbstraction::RunTimerFunction(TimerCallback& timerPtr)
 {
   CallbackBase::Execute( *timerPtr.mCallback );
 
-  std::vector<TimerCallback*>::iterator timerIter = std::find( mTimerPairsWaiting.begin(), mTimerPairsWaiting.end(), &timerPtr );
+  std::vector< std::unique_ptr< TimerCallback > >::iterator timerIter = std::find_if( mTimerPairsWaiting.begin(), mTimerPairsWaiting.end(),
+                                                                                      [&]( std::unique_ptr< TimerCallback >& p )
+                                                                                      { return p.get() == &timerPtr;} );
 
   if( timerIter == std::end(mTimerPairsWaiting) )
   {
index c288cd1..fe4b018 100644 (file)
@@ -26,6 +26,7 @@
 // EXTERNAL INCLUDES
 #include <cstdint>
 #include <string>
+#include <memory>
 #include <dali/integration-api/platform-abstraction.h>
 
 namespace Dali
@@ -130,8 +131,8 @@ private:
 
   std::string mDataStoragePath;
 
-  std::vector<TimerCallback*> mTimerPairsWaiting;
-  std::vector<TimerCallback*> mTimerPairsSpent;
+  std::vector< std::unique_ptr< TimerCallback > > mTimerPairsWaiting;
+  std::vector< std::unique_ptr< TimerCallback > > mTimerPairsSpent;
 };
 
 /**