static void run_py_callbacks(unsigned int gpio) { PyObject *result; PyGILState_STATE gstate; struct py_callback *cb = py_callbacks; struct timeval tv_timenow; unsigned long long timenow; while (cb != NULL) { if (cb->gpio == gpio) { gettimeofday(&tv_timenow, NULL); timenow = tv_timenow.tv_sec*1E6 + tv_timenow.tv_usec; if (cb->bouncetime == 0 || timenow - cb->lastcall > cb->bouncetime*1000 || cb->lastcall == 0 || cb->lastcall > timenow) { // run callback gstate = PyGILState_Ensure(); result = PyObject_CallFunction(cb->py_cb, "i", chan_from_gpio(gpio)); if (result == NULL && PyErr_Occurred()) { PyErr_Print(); PyErr_Clear(); } Py_XDECREF(result); PyGILState_Release(gstate); } cb->lastcall = timenow; } cb = cb->next; } }
static void run_py_callbacks(unsigned int gpio) { PyObject *result; PyGILState_STATE gstate; struct py_callback *cb = py_callbacks; while (cb != NULL) { if (cb->gpio == gpio) { // run callback gstate = PyGILState_Ensure(); result = PyObject_CallFunction(cb->py_cb, "i", chan_from_gpio(gpio)); if (result == NULL && PyErr_Occurred()){ PyErr_Print(); PyErr_Clear(); } Py_XDECREF(result); PyGILState_Release(gstate); } cb = cb->next; } }