From: gnome-perl (bugzilla.gnome.o. <bug...@gn...> - 2011-05-15 15:53:10
|
https://bugzilla.gnome.org/show_bug.cgi?id=620099 gnome-perl | Glib | unspecified --- Comment #7 from Torsten Schoenfeld <kaf...@gm...> 2011-05-15 15:52:57 UTC --- Alright, I've finally convinced myself that my previous approach cannot work. So I caved in and implemented what muppet has been suggesting all along: when invoked from a non-main thread, hand the request over to the main loop so that it gets executed on the main thread. This works fine in the following common case: * main thread connects handler to a signal, then goes into main loop * non-main thread gets created somewhere to do some work, then emits said signal * our marshallers hands the request over to the main loop * main loop executes the request on the main thread It does not work, however, if the main thread is busy doing something else. In this case, the main loop does not run, and so the signal invocation is blocked until the main thread returns control to the main loop. The attached patch, still containing some debug spew and FIXME question, implements this approach in our normal signal marshaller, gperl_closure_invoke. It does not fix custom signal marshallers, or stuff that uses direct callbacks. Comments, criticism, suggestions welcome. -- Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. |