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.
This commit is contained in:
Michael Natterer 2011-11-11 23:49:21 +01:00
parent 7546eeaa62
commit 0729cdc9a1

View File

@ -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 *