The GIL, callbacks, and GPFs
Thomas Heller
theller at python.net
Wed Jul 6 14:59:05 EDT 2005
Francois De Serres <fdeserres at gmx.net> writes:
> Hello,
>
> I'm chasing a GPF in the interpreter when running my extension module.
> It's not very elaborated, but uses a system (threaded) callback, and
> therefore the GIL.
> Help would be mucho appreciated. Here's the rough picture:
>
> static void external_callback(const Bag * const bag) { if
> (my_callback && (my_callback != Py_None)) {
> PyObject * arglist = NULL;
> PyObject * result = NULL;
> arglist = Py_BuildValue("(s#)", bag->data, bag->size);
> /* do it */
> PyGILState_STATE gil = PyGILState_Ensure();
You're calling Py_BuildValue without holding the GIL. Not sure if
that's the reason for your problems, but I don't think its ok.
> result = PyEval_CallObject(my_callback, arglist);
> PyGILState_Release(gil);
> Py_DECREF(arglist);
> Py_DECREF(result); }
> }
Thomas
More information about the Python-list
mailing list