python: Fix error handling for callbacks.
This commit is contained in:
parent
f0c0dab5a9
commit
75fb30365e
|
@ -173,15 +173,29 @@ typedef guint pyg_flags_type;
|
||||||
Py_XDECREF(arglist);
|
Py_XDECREF(arglist);
|
||||||
Py_XDECREF(revents_obj);
|
Py_XDECREF(revents_obj);
|
||||||
|
|
||||||
if (PyErr_Occurred() || !PyBool_Check(result))
|
bool completed = !PyErr_Occurred();
|
||||||
throw sigrok::Error(SR_ERR);
|
|
||||||
|
|
||||||
bool retval = (result == Py_True);
|
if (!completed)
|
||||||
|
PyErr_Print();
|
||||||
|
|
||||||
|
bool valid_result = (completed && PyBool_Check(result));
|
||||||
|
|
||||||
|
if (completed && !valid_result)
|
||||||
|
{
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
"EventSource callback did not return a boolean");
|
||||||
|
PyErr_Print();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool retval = (valid_result && result == Py_True);
|
||||||
|
|
||||||
Py_XDECREF(result);
|
Py_XDECREF(result);
|
||||||
|
|
||||||
PyGILState_Release(gstate);
|
PyGILState_Release(gstate);
|
||||||
|
|
||||||
|
if (!valid_result)
|
||||||
|
throw sigrok::Error(SR_ERR);
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -212,9 +226,27 @@ typedef guint pyg_flags_type;
|
||||||
Py_XDECREF(arglist);
|
Py_XDECREF(arglist);
|
||||||
Py_XDECREF(log_obj);
|
Py_XDECREF(log_obj);
|
||||||
Py_XDECREF(string_obj);
|
Py_XDECREF(string_obj);
|
||||||
|
|
||||||
|
bool completed = !PyErr_Occurred();
|
||||||
|
|
||||||
|
if (!completed)
|
||||||
|
PyErr_Print();
|
||||||
|
|
||||||
|
bool valid_result = (completed && result == Py_None);
|
||||||
|
|
||||||
Py_XDECREF(result);
|
Py_XDECREF(result);
|
||||||
|
|
||||||
|
if (completed && !valid_result)
|
||||||
|
{
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
"Log callback did not return None");
|
||||||
|
PyErr_Print();
|
||||||
|
}
|
||||||
|
|
||||||
PyGILState_Release(gstate);
|
PyGILState_Release(gstate);
|
||||||
|
|
||||||
|
if (!valid_result)
|
||||||
|
throw sigrok::Error(SR_ERR);
|
||||||
};
|
};
|
||||||
|
|
||||||
Py_XINCREF($input);
|
Py_XINCREF($input);
|
||||||
|
@ -248,9 +280,27 @@ typedef guint pyg_flags_type;
|
||||||
Py_XDECREF(arglist);
|
Py_XDECREF(arglist);
|
||||||
Py_XDECREF(device_obj);
|
Py_XDECREF(device_obj);
|
||||||
Py_XDECREF(packet_obj);
|
Py_XDECREF(packet_obj);
|
||||||
|
|
||||||
|
bool completed = !PyErr_Occurred();
|
||||||
|
|
||||||
|
if (!completed)
|
||||||
|
PyErr_Print();
|
||||||
|
|
||||||
|
bool valid_result = (completed && result == Py_None);
|
||||||
|
|
||||||
Py_XDECREF(result);
|
Py_XDECREF(result);
|
||||||
|
|
||||||
|
if (completed && !valid_result)
|
||||||
|
{
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
"Datafeed callback did not return None");
|
||||||
|
PyErr_Print();
|
||||||
|
}
|
||||||
|
|
||||||
PyGILState_Release(gstate);
|
PyGILState_Release(gstate);
|
||||||
|
|
||||||
|
if (!valid_result)
|
||||||
|
throw sigrok::Error(SR_ERR);
|
||||||
};
|
};
|
||||||
|
|
||||||
Py_XINCREF($input);
|
Py_XINCREF($input);
|
||||||
|
|
Loading…
Reference in New Issue