Fix for ecore::Timer 35/168835/2
authorLukasz Wlazly <l.wlazly@partner.samsung.com>
Wed, 31 Jan 2018 08:45:25 +0000 (09:45 +0100)
committerLukasz Wlazly <l.wlazly@partner.samsung.com>
Wed, 31 Jan 2018 09:08:24 +0000 (10:08 +0100)
1. Invalid move constructor
2. Reset with no arguments haven't always removed callback

Change-Id: Ia02dd6dd4dc02849290c07560dfa667b033fea71

src/ecore.cpp
src/ecore.hpp

index b16ca7a..bf8b85e 100644 (file)
@@ -34,6 +34,7 @@ namespace ecore
                if (timerHandler) {
                        ecore_timer_del(timerHandler);
                        timerHandler = nullptr;
+                       method = {};
                }
        }
 
@@ -67,8 +68,10 @@ namespace ecore
                ASSERT(prevTimer == timerHandler || result == ecore::TimerRepetitionPolicy::cancel, "Timer changed during callback invokation");
 
                if (result == ecore::TimerRepetitionPolicy::cancel) {
-                       timerHandler = (prevTimer != timerHandler) ? timerHandler : nullptr;
-                       if (!timerHandler) method = {};
+                       if (timerHandler == prevTimer) {
+                               timerHandler = nullptr;
+                               method = {};
+                       }
                        return ECORE_CALLBACK_CANCEL;
                }
 
index c61c91c..d749fca 100644 (file)
@@ -37,7 +37,7 @@ namespace ecore
                ~Timer();
 
                Timer(const Timer &) = delete;
-               Timer(const Timer &&) = delete;
+               Timer(Timer &&) = delete;
                Timer &operator=(const Timer &) = delete;
                Timer &operator=(Timer &&) = delete;