[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19688] trunk/blender/source/blender/ python/BPY_interface.c: fix some refcounting issues with PyDict_SetItemString

Campbell Barton ideasman42 at gmail.com
Sun Apr 12 22:19:27 CEST 2009


Revision: 19688
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19688
Author:   campbellbarton
Date:     2009-04-12 22:19:27 +0200 (Sun, 12 Apr 2009)

Log Message:
-----------
fix some refcounting issues with PyDict_SetItemString

Modified Paths:
--------------
    trunk/blender/source/blender/python/BPY_interface.c

Modified: trunk/blender/source/blender/python/BPY_interface.c
===================================================================
--- trunk/blender/source/blender/python/BPY_interface.c	2009-04-12 19:46:50 UTC (rev 19687)
+++ trunk/blender/source/blender/python/BPY_interface.c	2009-04-12 20:19:27 UTC (rev 19688)
@@ -106,6 +106,7 @@
 {
 	PyObject *maindict;
 	PyObject *main_module;
+	PyObject *list;
 	char *list_name = ARM_WEAKREF_LIST_NAME;
 
 	main_module = PyImport_AddModule( "__main__");
@@ -121,14 +122,14 @@
 			PyDict_DelItemString(maindict,list_name);
 			Py_XDECREF( weakreflink );
 		}
-
-		if (PyDict_SetItemString(maindict, 
-								 list_name, 
-								 PyList_New(0)) == -1){
+		
+		list= PyList_New(0);
+		if (PyDict_SetItemString(maindict, list_name, list) == -1){
 			printf("Oops - setup_armature_weakrefs()\n");
-			
+			Py_DECREF(list);
 			return 0;
 		}
+		Py_DECREF(list); /* the dict owns it now */
 	}
 	return 1;
 }
@@ -1238,13 +1239,14 @@
 
 	/* import some modules: builtins, Blender, math, Blender.noise */
 
-	PyDict_SetItemString(d, "__builtins__", PyEval_GetBuiltins());
+	PyDict_SetItemString(d, "__builtins__", PyEval_GetBuiltins()); /* borrow ref, ok */
 
 	mod = PyImport_ImportModule("Blender");
 	if (mod) {
 		PyDict_SetItemString(d, "Blender", mod);
 		PyDict_SetItemString(d, "b", mod);
 		Py_DECREF(mod);
+		Py_DECREF(mod);
 	} else {
 		PyErr_Clear();
 	}
@@ -1257,6 +1259,7 @@
 		PyDict_SetItemString(d, "math", mod);
 		PyDict_SetItemString(d, "m", mod);
 		Py_DECREF(mod);
+		Py_DECREF(mod);
 	} 
 
 	mod = PyImport_ImportModule("Blender.Noise");
@@ -1264,6 +1267,7 @@
 		PyDict_SetItemString(d, "noise", mod);
 		PyDict_SetItemString(d, "n", mod);
 		Py_DECREF(mod);
+		Py_DECREF(mod);
 	} else {
 		PyErr_Clear();
 	}
@@ -1276,6 +1280,7 @@
 			PyDict_SetItemString(d, "pydrivers", mod);
 			PyDict_SetItemString(d, "p", mod);
 			Py_DECREF(mod);
+			Py_DECREF(mod);
 		} else {
 			PyErr_Clear();
 		}





More information about the Bf-blender-cvs mailing list