Re: [pygtk] sys.excepthook and the gtk thread lock

2003-09-11 Thread James Henstridge
On 12/09/2003 8:42 AM, Tim Evans wrote:

I have created a routine that displays exceptions in a gtk dialog box, 
which I place in sys.excepthook.  I have run into a problem when using 
this routine with threading.

The sys.excepthook function can be run from all sorts of places, 
sometimes the gtk lock will be held, other times it won't be.  The gdk 
thread lock is not guaranteed to be recursive (it's just a GMutex, not 
a GStaticRecMutex), so I can't just call gtk.threads_enter every time 
as it could deadlock.

Does anyone have a solution to this?

Does anyone else think it would be much easier if the gtk lock was 
recursive?  GDK_THREADS_ENTER is a macro, so I don't think that the 
lock could be changed from a GMutex to a GStaticRecMutex without 
breaking binary compatibility.

This is not going to happen.  There are many bits of code that use the 
GDK_THREADS_ENTER/LEAVE macros, not just in pygtk and GTK proper.

What you can probably do though is to queue an idle handler that 
displays the dialog.  Next time the main loop is run, your idle handler 
will get executed, where you can create and display the dialog.  Note 
that you will need to put in gtk.threads_enter()/leave() calls in your 
idle handler, because the lock isn't held when running an idle.

Alternatively, you could ignore threading completely, and only use your 
excepthook with single threaded programs ...

James.

--
Email: [EMAIL PROTECTED]
WWW:   http://www.daa.com.au/~james/


___
pygtk mailing list   [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/


[pygtk] sys.excepthook and the gtk thread lock

2003-09-11 Thread Tim Evans
I have created a routine that displays exceptions in a gtk dialog box, 
which I place in sys.excepthook.  I have run into a problem when using 
this routine with threading.

The sys.excepthook function can be run from all sorts of places, 
sometimes the gtk lock will be held, other times it won't be.  The gdk 
thread lock is not guaranteed to be recursive (it's just a GMutex, not a 
GStaticRecMutex), so I can't just call gtk.threads_enter every time as 
it could deadlock.

Does anyone have a solution to this?

Does anyone else think it would be much easier if the gtk lock was 
recursive?  GDK_THREADS_ENTER is a macro, so I don't think that the lock 
could be changed from a GMutex to a GStaticRecMutex without breaking 
binary compatibility.

--
Tim Evans
Applied Research Associates NZ
http://www.aranz.com/
___
pygtk mailing list   [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/