Re: Threads
- From: Russell Shaw <rjshaw netspace net au>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: Threads
- Date: Thu, 16 Dec 2004 04:49:02 +1100
Olexiy Avramchenko wrote:
Russell Shaw wrote:
Ok, in gtkmain.c:
void
gtk_main (void)
{
...
if (g_main_loop_is_running (main_loops->data))
{
GDK_THREADS_LEAVE ();
g_main_loop_run (loop);
GDK_THREADS_ENTER ();
gdk_flush ();
}
...
}
So if g_main_loop_run() runs for the duration of the app, then there
is nothing
guarding gdk calls made by gtk callbacks. So, doesn't this mean that
every gtk
operation in a gtk callback that eventually calls a gdk function,
should be
surrounded by gdk_threads_enter()/leave() ?
GTK register a gtk_main_do_event() function to be called on every event
(see gdk_event_handler_set in "gtk/gtkmain.c").
Ok, i didn't look hard enough. It's buried way down in gtk_init() in the
parser init stuff.
> GDK locks the mutex
before gtk_main_do_event() call (see gdk_event_dispatch in
"gdk/x11/gdk-events-x11.c"). Every gtk callback invoked from main loop
will be automatically protected. You should protect only code in
*timeout* and *idle* callbacks, because they run outside gdk event
dispatching code.
Ok. Atleast i have an idea of how to track down threading bugs now.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]