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();
}
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs