From cc1798e0c00735ed1dcee8b5f71d94377b501105 Mon Sep 17 00:00:00 2001
From: Raymond Hettinger <python@rcn.com>
Date: Tue, 16 Sep 2003 04:27:52 +0000
Subject: Improve the leak fix so that PyTuple_New is only called when needed.

---
 Python/compile.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/Python/compile.c b/Python/compile.c
index f94a3ac..b95732b 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -105,7 +105,7 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kw)
 	int stacksize;
 	int flags;
 	PyObject *co;
-	PyObject *empty;
+	PyObject *empty = NULL;
 	PyObject *code;
 	PyObject *consts;
 	PyObject *names;
@@ -135,19 +135,21 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kw)
 		return NULL;
 	}
 
-	empty = PyTuple_New(0);
-	if (empty == NULL)
-		return NULL;
-	if (freevars == NULL)
-		freevars = empty;
-	if (cellvars == NULL)
-		cellvars = empty;
+	if (freevars == NULL || cellvars == NULL) {
+		empty = PyTuple_New(0);
+		if (empty == NULL)
+			return NULL;
+		if (freevars == NULL)
+			freevars = empty;
+		if (cellvars == NULL)
+			cellvars = empty;
+	}
 
 	co = (PyObject *) PyCode_New(argcount, nlocals, stacksize, flags,
 				      code, consts, names, varnames,
 				      freevars, cellvars, filename, name,
 				      firstlineno, lnotab);
-	Py_DECREF(empty);
+	Py_XDECREF(empty);
 	return co;
 }
 
-- 
cgit v0.12

