Fix refcounting for exception handling

This commit is contained in:
Jason Paryani
2013-11-13 21:02:43 -08:00
parent 422266d0b8
commit 56d5ea688e

View File

@@ -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));
} }
} }