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);
}
}
Python 側:
def on_inactivity():
print 'inactivity'
register_inactivity_callback(on_inactivity)
このコードを ubuntu デスクトップ プラットフォームとその動作をテストしましたが、ARM に移行すると、プログラムが PyEval_CallingObject でクラッシュ/クローズし始めました。
コードで行っている疑わしいことはありますか? 前もって感謝します。