In your C callbacks that call python code, you have to put
pyg_gil_state_ensure and pyg_gil_state_release around the python calls.
Look for examples in pygtk code..
On Mon, 2005-10-17 at 17:13 +1000, Nigel Tao wrote:
> I have written a Python binding [1] to Tomboy's global keybinding code
> (written in C). And it all works fine. Mostly.
>
> If my python app calls
> gtk.gdk.threads_init()
> earlier, however, then it segfaults somewhere in the PyEval_CallObject
> of:
> --------------------
> void handler_c_func (char *keystring, gpointer user_data)
> {
> Handler_and_Args *ha = (Handler_and_Args *) user_data;
> PyObject *result = PyEval_CallObject(ha->handler, ha->args);
> if (result == NULL) {
> if (PyErr_Occurred()) {
> PyErr_Print();
> }
> } else {
> Py_DECREF(result);
> }
> }
> --------------------
>
> If I add gdk_threads_enter() and gdk_threads_leave() just before and
> after the "PyObject *result = ..." line, then it doesn't segfault, but
> just blocks at the gdk_threads_enter. I tried messing around with
> Py_BEGIN_ALLOW_THREADS, and alternatively having handler_c_func calling
> g_idle_add, but both of those didn't seem to work.
>
> Any ideas?
>
> Thanks in advance,
> Nigel.
>
>
> [1] http://cvs.gnome.org/viewcvs/deskbar-applet/deskbar/keybinder/
> _______________________________________________
> pygtk mailing list [email protected]
> http://www.daa.com.au/mailman/listinfo/pygtk
> Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
--
Gustavo J. A. M. Carneiro
<[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
The universe is always one step beyond logic.
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/