[GLIB] RunLoop::dispatch always executes the function on the main thread instead...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 May 2014 08:08:24 +0000 (08:08 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 May 2014 08:08:24 +0000 (08:08 +0000)
https://bugs.webkit.org/show_bug.cgi?id=133291

Patch by Gwang Yoon Hwang <yoon@igalia.com> on 2014-05-27
Reviewed by Carlos Garcia Campos.

GMainLoopSource::schedule[AfterDelay] must be used with the appropriate
GMainContext. Because current implementations in RunLoopGtk passes nullptr
instead of its runLoopContext when using GMainLoopSource, all of dispatched
functions are executed on the main thread regardless of which runloops is used.

This patch fixes the issue by passing the m_runLoopContext instead the default
parameter to the GMainLoopSource::schedule[AfterDelay].

* wtf/gtk/RunLoopGtk.cpp:
(WTF::RunLoop::wakeUp):
(WTF::RunLoop::TimerBase::start):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@169373 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/gtk/RunLoopGtk.cpp

index ed977e7..536ecb1 100644 (file)
@@ -1,3 +1,22 @@
+2014-05-27  Gwang Yoon Hwang  <yoon@igalia.com>
+
+        [GLIB] RunLoop::dispatch always executes the function on the main thread instead of the target thread.
+        https://bugs.webkit.org/show_bug.cgi?id=133291
+
+        Reviewed by Carlos Garcia Campos.
+
+        GMainLoopSource::schedule[AfterDelay] must be used with the appropriate
+        GMainContext. Because current implementations in RunLoopGtk passes nullptr
+        instead of its runLoopContext when using GMainLoopSource, all of dispatched
+        functions are executed on the main thread regardless of which runloops is used.
+
+        This patch fixes the issue by passing the m_runLoopContext instead the default
+        parameter to the GMainLoopSource::schedule[AfterDelay].
+
+        * wtf/gtk/RunLoopGtk.cpp:
+        (WTF::RunLoop::wakeUp):
+        (WTF::RunLoop::TimerBase::start):
+
 2014-05-26  Darin Adler  <darin@apple.com>
 
         Class name matching should use ASCII case-insensitive matching, not Unicode case folding
index d0d2e8e..e4af61c 100644 (file)
@@ -102,7 +102,7 @@ void RunLoop::wakeUp()
     RefPtr<RunLoop> runLoop(this);
     GMainLoopSource::createAndDeleteOnDestroy().schedule("[WebKit] RunLoop work", std::function<void()>([runLoop] {
         runLoop->performWork();
-    }));
+    }), G_PRIORITY_DEFAULT, nullptr, m_runLoopContext.get());
     g_main_context_wakeup(m_runLoopContext.get());
 }
 
@@ -119,7 +119,7 @@ RunLoop::TimerBase::~TimerBase()
 void RunLoop::TimerBase::start(double fireInterval, bool repeat)
 {
     m_timerSource.scheduleAfterDelay("[WebKit] RunLoop::Timer", std::function<bool ()>([this, repeat] { fired(); return repeat; }),
-        std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::duration<double>(fireInterval)));
+        std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::duration<double>(fireInterval)), G_PRIORITY_DEFAULT, nullptr, m_runLoop.m_runLoopContext.get());
 }
 
 void RunLoop::TimerBase::stop()