From: Heeyong Song Date: Wed, 29 Jul 2020 04:24:10 +0000 (+0900) Subject: Fix memory leak X-Git-Tag: dali_1.9.23~2^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git;a=commitdiff_plain;h=2c47d8db14b7e82558e7eb0dcf0b3469cc568cd0 Fix memory leak Delete TimerCallback Change-Id: I36ffddcb3668580095b0491876fe04a395ba5822 --- diff --git a/dali/internal/legacy/common/tizen-platform-abstraction.cpp b/dali/internal/legacy/common/tizen-platform-abstraction.cpp index 4d60fee..104c07b 100644 --- a/dali/internal/legacy/common/tizen-platform-abstraction.cpp +++ b/dali/internal/legacy/common/tizen-platform-abstraction.cpp @@ -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::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) ) { diff --git a/dali/internal/legacy/common/tizen-platform-abstraction.h b/dali/internal/legacy/common/tizen-platform-abstraction.h index c288cd1..fe4b018 100644 --- a/dali/internal/legacy/common/tizen-platform-abstraction.h +++ b/dali/internal/legacy/common/tizen-platform-abstraction.h @@ -26,6 +26,7 @@ // EXTERNAL INCLUDES #include #include +#include #include namespace Dali @@ -130,8 +131,8 @@ private: std::string mDataStoragePath; - std::vector mTimerPairsWaiting; - std::vector mTimerPairsSpent; + std::vector< std::unique_ptr< TimerCallback > > mTimerPairsWaiting; + std::vector< std::unique_ptr< TimerCallback > > mTimerPairsSpent; }; /**