changeset 47675:d5aa25bf9360 legacy-trunk

#3095: don't leak values from Py_BuildValue.
author Georg Brandl <georg@python.org>
date Fri, 13 Jun 2008 06:56:50 +0000
parents 1464345a1968
children 38d0467f5ec7
files Modules/_multiprocessing/multiprocessing.c
diffstat 1 files changed, 9 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/Modules/_multiprocessing/multiprocessing.c	Fri Jun 13 06:03:25 2008 +0000
+++ b/Modules/_multiprocessing/multiprocessing.c	Fri Jun 13 06:56:50 2008 +0000
@@ -215,7 +215,7 @@
 PyMODINIT_FUNC
 init_multiprocessing(void)
 {
-	PyObject *module, *temp;
+	PyObject *module, *temp, *value;
 
 	/* Initialize module */
 	module = Py_InitModule("_multiprocessing", module_methods);
@@ -284,11 +284,12 @@
 	temp = PyDict_New();
 	if (!temp)
 		return;
-	if (PyModule_AddObject(module, "flags", temp) < 0)
-		return;
-
-#define ADD_FLAG(name) \
-    if (PyDict_SetItemString(temp, #name, Py_BuildValue("i", name)) < 0) return
+#define ADD_FLAG(name)						  \
+	value = Py_BuildValue("i", name);			  \
+	if (value == NULL) { Py_DECREF(temp); return; }		  \
+	if (PyDict_SetItemString(temp, #name, value) < 0) {	  \
+		Py_DECREF(temp); Py_DECREF(value); return; }	  \
+	Py_DECREF(value)
 	
 #ifdef HAVE_SEM_OPEN
 	ADD_FLAG(HAVE_SEM_OPEN);
@@ -305,4 +306,6 @@
 #ifdef HAVE_BROKEN_SEM_UNLINK
 	ADD_FLAG(HAVE_BROKEN_SEM_UNLINK);
 #endif
+	if (PyModule_AddObject(module, "flags", temp) < 0)
+		return;
 }