From 97bcc6f6d9f75d9499d59811b5659337595e642c Mon Sep 17 00:00:00 2001 From: Neil Conway Date: Mon, 20 Feb 2006 20:10:41 +0000 Subject: [PATCH] Fix three Python reference leaks in PLy_traceback(). This would result in leaking memory when invoking a PL/Python procedure that raises an exception. Unfortunately this still leaks memory, but at least the largest leak has been plugged. This patch also fixes a reference counting mistake in PLy_modify_tuple() for 8.0, 8.1 and HEAD: we don't actually own a reference to `platt', so we shouldn't Py_DECREF() it. --- src/pl/plpython/plpython.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c index a82e445123..2c450b902a 100644 --- a/src/pl/plpython/plpython.c +++ b/src/pl/plpython/plpython.c @@ -549,7 +549,6 @@ PLy_modify_tuple(PLyProcedure * proc, PyObject * pltd, TriggerData *tdata, { Py_XDECREF(plntup); Py_XDECREF(plkeys); - Py_XDECREF(platt); Py_XDECREF(plval); Py_XDECREF(plstr); @@ -1080,7 +1079,7 @@ PLy_procedure_create(FunctionCallInfo fcinfo, Oid tgreloid, } /* - * now get information required for input conversion of the procedures + * now get information required for input conversion of the procedure's * arguments. */ proc->nargs = fcinfo->nargs; @@ -2537,6 +2536,7 @@ PLy_traceback(int *xlevel) } PyErr_NormalizeException(&e, &v, &tb); + Py_XDECREF(tb); eob = PyObject_Str(e); if ((v) && ((vob = PyObject_Str(v)) != NULL)) @@ -2555,9 +2555,10 @@ PLy_traceback(int *xlevel) Py_DECREF(eob); Py_XDECREF(vob); + Py_XDECREF(v); /* - * intuit an appropriate error level for based on the exception type + * intuit an appropriate error level based on the exception type */ if ((PLy_exc_error) && (PyErr_GivenExceptionMatches(e, PLy_exc_error))) *xlevel = ERROR; @@ -2566,6 +2567,7 @@ PLy_traceback(int *xlevel) else *xlevel = ERROR; + Py_DECREF(e); return xstr; } -- 2.39.5