[gtk+] quartz: fix a race condition when waking up the CGRunLoop
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] quartz: fix a race condition when waking up the CGRunLoop
- Date: Fri, 11 Nov 2011 22:59:29 +0000 (UTC)
commit e19cbd7a045935a63801bc853746b5225d7de426
Author: Michael Natterer <mitch gimp org>
Date: Fri Nov 11 23:49:21 2011 +0100
quartz: fix a race condition when waking up the CGRunLoop
Wake up the run loop unconditionally (don't check if it is waiting) because
it might go into waiting state right after we checked for it. Fixes GIMP
startup (which has a lot of GIOChannel I/O but zero NSEvents) from several
minutes to a few seconds.
(cherry picked from commit 0729cdc9a1e8003c41d3ebf20eecfe2d1b29ffbe)
gdk/quartz/gdkeventloop-quartz.c | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)
---
diff --git a/gdk/quartz/gdkeventloop-quartz.c b/gdk/quartz/gdkeventloop-quartz.c
index 702238c..4181a5d 100644
--- a/gdk/quartz/gdkeventloop-quartz.c
+++ b/gdk/quartz/gdkeventloop-quartz.c
@@ -207,9 +207,12 @@ signal_main_thread (void)
*/
if (!run_loop_polling_async)
CFRunLoopSourceSignal (select_main_thread_source);
-
- if (CFRunLoopIsWaiting (main_thread_run_loop))
- CFRunLoopWakeUp (main_thread_run_loop);
+
+ /* Don't check for CFRunLoopIsWaiting() here because it causes a
+ * race condition (the loop could go into waiting state right after
+ * we checked).
+ */
+ CFRunLoopWakeUp (main_thread_run_loop);
}
static void *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]