fix some refcounting issues with PyDict_SetItemString

This commit is contained in:
2009-04-12 20:19:27 +00:00
parent 8664e35adf
commit 5b07f06136

View File

@@ -106,6 +106,7 @@ static int setup_armature_weakrefs()
{ {
PyObject *maindict; PyObject *maindict;
PyObject *main_module; PyObject *main_module;
PyObject *list;
char *list_name = ARM_WEAKREF_LIST_NAME; char *list_name = ARM_WEAKREF_LIST_NAME;
main_module = PyImport_AddModule( "__main__"); main_module = PyImport_AddModule( "__main__");
@@ -121,14 +122,14 @@ static int setup_armature_weakrefs()
PyDict_DelItemString(maindict,list_name); PyDict_DelItemString(maindict,list_name);
Py_XDECREF( weakreflink ); Py_XDECREF( weakreflink );
} }
if (PyDict_SetItemString(maindict, list= PyList_New(0);
list_name, if (PyDict_SetItemString(maindict, list_name, list) == -1){
PyList_New(0)) == -1){
printf("Oops - setup_armature_weakrefs()\n"); printf("Oops - setup_armature_weakrefs()\n");
Py_DECREF(list);
return 0; return 0;
} }
Py_DECREF(list); /* the dict owns it now */
} }
return 1; return 1;
} }
@@ -1238,13 +1239,14 @@ static int bpy_pydriver_create_dict(void)
/* import some modules: builtins, Blender, math, Blender.noise */ /* 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"); mod = PyImport_ImportModule("Blender");
if (mod) { if (mod) {
PyDict_SetItemString(d, "Blender", mod); PyDict_SetItemString(d, "Blender", mod);
PyDict_SetItemString(d, "b", mod); PyDict_SetItemString(d, "b", mod);
Py_DECREF(mod); Py_DECREF(mod);
Py_DECREF(mod);
} else { } else {
PyErr_Clear(); PyErr_Clear();
} }
@@ -1257,6 +1259,7 @@ static int bpy_pydriver_create_dict(void)
PyDict_SetItemString(d, "math", mod); PyDict_SetItemString(d, "math", mod);
PyDict_SetItemString(d, "m", mod); PyDict_SetItemString(d, "m", mod);
Py_DECREF(mod); Py_DECREF(mod);
Py_DECREF(mod);
} }
mod = PyImport_ImportModule("Blender.Noise"); mod = PyImport_ImportModule("Blender.Noise");
@@ -1264,6 +1267,7 @@ static int bpy_pydriver_create_dict(void)
PyDict_SetItemString(d, "noise", mod); PyDict_SetItemString(d, "noise", mod);
PyDict_SetItemString(d, "n", mod); PyDict_SetItemString(d, "n", mod);
Py_DECREF(mod); Py_DECREF(mod);
Py_DECREF(mod);
} else { } else {
PyErr_Clear(); PyErr_Clear();
} }
@@ -1276,6 +1280,7 @@ static int bpy_pydriver_create_dict(void)
PyDict_SetItemString(d, "pydrivers", mod); PyDict_SetItemString(d, "pydrivers", mod);
PyDict_SetItemString(d, "p", mod); PyDict_SetItemString(d, "p", mod);
Py_DECREF(mod); Py_DECREF(mod);
Py_DECREF(mod);
} else { } else {
PyErr_Clear(); PyErr_Clear();
} }