On Mon, 2005-04-04 at 20:09 +1000, Jonathan Matthew wrote: > I've been experiencing a lot of deadlocks when using rhythmbox-applet, > which turned out to be caused by recursive GDK_THREADS_ENTER calls. > > This was happening on gconf calls, which caused ORBit to process any > incoming requests *within the gconf call*. If the gconf call was made > with the gdk lock held, and there was a bonobo remote request waiting, > the bonobo request handler would try to take the gdk lock again. > > Dropping the gdk lock before anything that could result in a gconf > call looked way too hard, so I just hacked in gdk lock/unlock functions > using a GStaticRecMutex instead of the GMutex the standard functions > use. This is patch-6 and patch-7 in my rhythmbox--remote--0.9 branch. After looking at your code (and reading the gdk threads docs) I'm a bit confused. Is it not necessary to call gdk_threads_init after gdk_threads_set_lock_functions in your rb_threads_init function? For sure you know this stuff better than me, but the docs say that every process that wants to use threads has to call gdk_threads_init before entering the gtk main loop. Moreover, it's written that g_thread_init must be called before this function. Where is this done in rb? Any comments to clear up my confusion appreciated. :-) -- so long, oliver Public GPG Key: http://www.core-dump.info/olemke-public.asc Fingerprint: 2389 0B2C 1AA8 4E3E D5AD 3B72 00DB ABDC 73ED C558
Attachment:
signature.asc
Description: This is a digitally signed message part