I'm running into a problem when trying to perform a callback to a Python function from a C extension. Specifically, the callback is being made by a pthread that seems to cause the problem. If I call the callback from the parent process, it works fine. The PyObject is static, and holds the same value in both Parent and thread, so I'm at a loss as to what would be different in the pthread from the parent that would cause a segfault on the callback. The machine specifics are an x86 intel processor with RedHat linux.
Here is some clips of the C callback code showing how I'm storing the callback, then what the actual callback function is like. Any ideas? The function being called is a simply to display the string of text, and execution never seems to reach back to the Python code at all. Thanks, Travis B. /* callback function to the Python code */ static PyObject * my_callback = NULL; /* setting callback function */ static PyObject * my_set_callback(PyObject *dummy, PyObject *args) { PyObject *result = NULL; PyObject *temp; PyObject *arglist; if (PyArg_ParseTuple(args, "O:set_callback", &temp)) { if (!PyCallable_Check(temp)) { PyErr_SetString(PyExc_TypeError, "parameter must be callable"); return NULL; } Py_XINCREF(temp); /* Add a reference to new callback */ Py_XDECREF(my_callback); /* Dispose of previous callback */ my_callback = temp; /* Remember new callback */ /* return "None" */ Py_INCREF(Py_None); result = Py_None; } return result; } /* calling callback */ void callback(char * str) { PyObject *arglist; PyObject *result; if(str == NULL) return; if(my_callback == NULL) { printf("no callback function provided, returning...\n"); return; } /* Time to call the callback */ arglist = Py_BuildValue("(s)", str); result = PyEval_CallObject(my_callback, arglist); Py_DECREF(arglist); if(result == NULL) return; Py_DECREF(result); } -- http://mail.python.org/mailman/listinfo/python-list