Fix refcounting for exception handling
This commit is contained in:
@@ -37,7 +37,6 @@ void reraise_kj_exception() {
|
|||||||
void check_py_error() {
|
void check_py_error() {
|
||||||
PyObject * err = PyErr_Occurred();
|
PyObject * err = PyErr_Occurred();
|
||||||
if(err) {
|
if(err) {
|
||||||
// TODO: decref references
|
|
||||||
PyObject * ptype, *pvalue, *ptraceback;
|
PyObject * ptype, *pvalue, *ptraceback;
|
||||||
PyErr_Fetch(&ptype, &pvalue, &ptraceback);
|
PyErr_Fetch(&ptype, &pvalue, &ptraceback);
|
||||||
|
|
||||||
@@ -52,6 +51,12 @@ void check_py_error() {
|
|||||||
PyObject * py_description = PyTuple_GetItem(info, 2);
|
PyObject * py_description = PyTuple_GetItem(info, 2);
|
||||||
kj::String description(kj::heapString(PyBytes_AsString(py_description)));
|
kj::String description(kj::heapString(PyBytes_AsString(py_description)));
|
||||||
|
|
||||||
|
Py_DECREF(ptype);
|
||||||
|
Py_DECREF(pvalue);
|
||||||
|
Py_DECREF(ptraceback);
|
||||||
|
Py_DECREF(info);
|
||||||
|
PyErr_Clear();
|
||||||
|
|
||||||
throw kj::Exception(kj::Exception::Nature::OTHER, kj::Exception::Durability::PERMANENT, kj::mv(filename), line, kj::mv(description));
|
throw kj::Exception(kj::Exception::Nature::OTHER, kj::Exception::Durability::PERMANENT, kj::mv(filename), line, kj::mv(description));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user