我正在尝试在 python 脚本中使用 C 模块,所以当代码到达 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);
}
}
蟒蛇方面:
def on_inactivity():
print 'inactivity'
register_inactivity_callback(on_inactivity)
我已经在 ubuntu 桌面平台上测试了这段代码及其工作,但是当我转移到 ARM 时,程序开始在 PyEval_CallingObject 上崩溃/关闭。
我在代码中做了什么可疑的事情吗?提前致谢。