Re: gdk_threads_enter/leave() in threaded and non threaded situation
- From: Tristan Van Berkom <tristan van berkom gmail com>
- To: Olexiy Avramchenko <olexiy ctech cn ua>
- Cc: gtk-app-devel-list gnome org, Stefan Kost <ensonic hora-obscura de>
- Subject: Re: gdk_threads_enter/leave() in threaded and non threaded situation
- Date: Fri, 11 Feb 2005 09:24:33 -0500
On Fri, 11 Feb 2005 09:46:41 +0200, Olexiy Avramchenko
<olexiy ctech cn ua> wrote:
Stefan Kost wrote:
hi hi,
Hello
I have a gobject property that is set (via g_object_set()) from within a
thread and from the main thread.
Further I have signal handlers that watch this via notify::property.
These signal handler call gtk functions. Therefore in these signal
handlers the gtk part is wrapped with gdk_threads_enter/leave().
Wrong. GTK signal handlers run from main loop which is protected
(gdk_threads_enter() before gtk_main() call). So you never should place
locks inside signal handlers. You have to protect any call from *another
thread* that uses GDK/GTK functions or data.
Hmmm, there seems to be some confusion in this area... signal callbacks
do not run directly from the mainloop, and if its a signal that you're getting
from a Gtk object, you can assume that you already have the gdk_threads_mutex
locked (or at least that /should/ be the case).
When the mainloop runs, the mainloop holds the mutex for a short time, and
unlocks the mutex while executing source callbacks (GSource; i.e. idle
functions,
timeouts & IO channel watches).
OTOH, when you call a function in the gtk+ api, example
gtk_toggle_button_set_active(), once this function returns; all callbacks
registered to the "toggle" signal for that toggle button will have already
ran (i.e. there execution in *not* defered to the main loop).
So, signals are a result of an access to a GObject, if that GObject is
a GtkWidget, then the calling code segment should already have protected
that call with the gdk_threads_mutex, so essentialy; in signal callbacks you
already have the lock, and in GSource callbacks, you need to aquire it yourself.
I hope that clears things up a bit ;-)
Cheers,
-Tristan
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]