On Sun, 6 Mar 2011 16:03:43 +0000
Chris Vine <ch...@cvine.freeserve.co.uk> wrote:
> On Sun, 6 Mar 2011 10:57:24 +0800
> Wei-Ning Huang <aitjc...@gmail.com> wrote:
[snip]
> > I'm starting to think it's the bug of gtk+, or perhaps the
kernel?
> > btw, I'm using Arch Linux with Kernel 2.6.37(autogroup patched),
> > Gtk+ 2.22.
> > 
> > SI once suspect that it maybe something to do with the autogroup
> > patch I'm using, so I switch to the
> > default 2.6.37 kernel. The result is the same.. still deadlocks.
> > 
> > frustrated ... (but glad that this didn't happen on ubuntu)
> 
> In theory it could be a bug in glib, gtk+ or the kernel.  If, say,
> your motion_compile_thread() function is the only function executed
> by the test thread and never acquires any other locks than your test
> mutex, and you do not have a livelock, then I think you are right to
> be worried about that. Otherwise, it is more likely to be a bug in
> your code, and the fact that it works on ubuntu is not particularly
> indicative of anything, since this may just be the result of timing
> differences or different scheduling policies.

By the way, your first code did not treat the gdk global lock as 'Lock
1' and you did not indicate in your latest e-mail whether you have
corrected that: I should not even think about a glib/gtk+/kernel bug
until you have done so.

To take an example, if your test thread is started from a gtk+ signal
handler, the thread will be started holding the gdk global lock, and
therefore your 'while' loop will acquire 'cp_mutex' holding that lock.
If another thread calls gdk_threads_enter() while holding cp_mutex, you
are in line for a deadlock just from that.

Chris
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to