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);
}
}
파이썬 측면 : 내가 ARM로 이동 한 때 우분투 데스크탑 플랫폼과의 작업에이 코드를 테스트하지만, 한
def on_inactivity():
print 'inactivity'
register_inactivity_callback(on_inactivity)
는, 프로그램이 시작 충돌/PyEval_CallingObject를 닫습니다.
내가 코드에서 수행하고있는 의심스러운 항목이 있습니까? 미리 감사드립니다.
명백한 것을 볼 수 없습니다. 디버거를 통해 포인터를 실행하거나 valgrind 또는 유사한 방법을 사용하여 메모리 손상 여부를 확인하려고했을 때 포인터가 올바로 보이나요? 여러분이 시도 할 수있는 가장 빠른 방법은 일시적으로'Py_ [X] DECREFs'를 제거하고 메모리가 누출 될 수 있음에도 충돌을 방지 할 수 있는지 확인하는 것입니다. – Aya
크래시의 스택 추적은 무엇입니까? – ulidtko