Title: [151268] trunk/Source/WebCore
Revision
151268
Author
[email protected]
Date
2013-06-06 06:52:45 -0700 (Thu, 06 Jun 2013)

Log Message

Cannot set a new timer inside of timer callback in RunLoopTimerGtk & RunLoopTimerEFL
https://bugs.webkit.org/show_bug.cgi?id=117224

Patch by Gwang Yoon Hwang <[email protected]> on 2013-06-06
Reviewed by Christophe Dumez.

RunLoopTimer should clear its isActive flag before invoking timer
callback.

* platform/efl/RunLoopEfl.cpp:
(WebCore::RunLoop::TimerBase::timerFired):
* platform/gtk/RunLoopGtk.cpp:
(WebCore::RunLoop::TimerBase::timerFiredCallback):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (151267 => 151268)


--- trunk/Source/WebCore/ChangeLog	2013-06-06 13:39:27 UTC (rev 151267)
+++ trunk/Source/WebCore/ChangeLog	2013-06-06 13:52:45 UTC (rev 151268)
@@ -1,3 +1,18 @@
+2013-06-06  Gwang Yoon Hwang  <[email protected]>
+
+        Cannot set a new timer inside of timer callback in RunLoopTimerGtk & RunLoopTimerEFL
+        https://bugs.webkit.org/show_bug.cgi?id=117224
+
+        Reviewed by Christophe Dumez.
+
+        RunLoopTimer should clear its isActive flag before invoking timer
+        callback.
+
+        * platform/efl/RunLoopEfl.cpp:
+        (WebCore::RunLoop::TimerBase::timerFired):
+        * platform/gtk/RunLoopGtk.cpp:
+        (WebCore::RunLoop::TimerBase::timerFiredCallback):
+
 2013-06-06  Diego Pino Garcia  <[email protected]>
 
         [GTK] Parameters 'inResult' and 'resolver' from function 'webkit_dom_document_evaluate' should be allowed to be NULL

Modified: trunk/Source/WebCore/platform/efl/RunLoopEfl.cpp (151267 => 151268)


--- trunk/Source/WebCore/platform/efl/RunLoopEfl.cpp	2013-06-06 13:39:27 UTC (rev 151267)
+++ trunk/Source/WebCore/platform/efl/RunLoopEfl.cpp	2013-06-06 13:52:45 UTC (rev 151268)
@@ -100,14 +100,12 @@
 {
     RunLoop::TimerBase* timer = static_cast<RunLoop::TimerBase*>(data);
 
-    timer->fired();
-
-    if (!timer->m_isRepeating) {
+    if (!timer->m_isRepeating)
         timer->m_timer = 0;
-        return ECORE_CALLBACK_CANCEL;
-    }
 
-    return ECORE_CALLBACK_RENEW;
+    timer->fired();
+
+    return timer->m_isRepeating ? ECORE_CALLBACK_RENEW : ECORE_CALLBACK_CANCEL;
 }
 
 void RunLoop::TimerBase::start(double nextFireInterval, bool repeat)

Modified: trunk/Source/WebCore/platform/gtk/RunLoopGtk.cpp (151267 => 151268)


--- trunk/Source/WebCore/platform/gtk/RunLoopGtk.cpp	2013-06-06 13:39:27 UTC (rev 151267)
+++ trunk/Source/WebCore/platform/gtk/RunLoopGtk.cpp	2013-06-06 13:52:45 UTC (rev 151268)
@@ -136,9 +136,10 @@
     GSource* currentTimerSource = timer->m_timerSource.get();
     bool isRepeating = timer->isRepeating();
     // This can change the timerSource by starting a new timer within the callback.
-    timer->fired();
     if (!isRepeating && currentTimerSource == timer->m_timerSource.get())
         timer->clearTimerSource();
+
+    timer->fired();
     return isRepeating;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to