1
我想在python腳本中使用C模塊,所以當代碼到達PyEval_Callobject時調用程序崩潰/關閉。當調用PyEval_CallObject時程序關閉
C面代碼:
static PyObject *register_inactivity_callback(PyObject *self, PyObject *args)
{
PyObject *temp;
if (!PyTuple_Check(args) || PyTuple_Size(args) < 0)
{
fprintf(stderr, "invalid input parameter\n");
Py_RETURN_NONE;
}
temp = PyTuple_GetItem(args, 0);
if (!PyCallable_Check(temp))
{
fprintf(stderr, "parameter must be callable\n");
Py_RETURN_FALSE;
}
Py_XINCREF(temp);
Py_XDECREF(inactivity_callback);
inactivity_callback = temp;
Py_RETURN_TRUE;
}
void inactivity_callback_internal(void *arg)
{
PyObject *arglist;
struct input_event *event = (struct input_event *)arg;
if (inactivity_callback && event)
{
arglist = Py_BuildValue("()");
PyEval_CallObject(inactivity_callback, arglist);
Py_DECREF(arglist);
}
}
Python端:
def on_inactivity():
print 'inactivity'
register_inactivity_callback(on_inactivity)
我已經測試了在Ubuntu桌面平臺及其工作的代碼,但是當我已經轉移到ARM,程序開始崩潰/關閉PyEval_CallingObject。
我在代碼中有什麼可疑的事情嗎? 在此先感謝。
看不到任何明顯的東西。當通過調試器運行指針時,指針看起來是否有效,並且/或者您是否嘗試使用valgrind或類似方法來檢查內存損壞?你可以嘗試的一個快速的方法是暫時刪除'Py_ [X] DECREFs',看看它是否能夠防止崩潰,儘管你最終可能會泄漏內存。 – Aya 2013-04-11 13:59:32
什麼是崩潰堆棧跟蹤? – ulidtko 2013-04-11 14:52:40