[Python-Dev] questions about memory management

Julia Lawall julia.lawall at lip6.fr
Sat Apr 28 10:06:52 CEST 2012


In Python-3.2.3/Python/import.c, in the function 
_PyImport_FixupExtensionUnicode, is any call to PyDict_DelItemString 
needed before the final failure returns?
 modules = PyImport_GetModuleDict();
 if (PyDict_SetItemString(modules, name, mod) < 0)
 return -1;
 if (_PyState_AddModule(mod, def) < 0) {
 PyDict_DelItemString(modules, name);
 return -1;
 }
 if (def->m_size == -1) {
 if (def->m_base.m_copy) {
 /* Somebody already imported the module,
 likely under a different name.
 XXX this should really not happen. */
 Py_DECREF(def->m_base.m_copy);
 def->m_base.m_copy = NULL;
 }
 dict = PyModule_GetDict(mod);
 if (dict == NULL)
 return -1;
 def->m_base.m_copy = PyDict_Copy(dict);
 if (def->m_base.m_copy == NULL)
 return -1;
 }
In Python-3.2.3/Modules/ossaudiodev.c, in the function build_namelists, is 
it intentional that labels is not freed in the last failure case:
 if (PyModule_AddObject(module, "control_labels", labels) == -1)
 goto error2;
 if (PyModule_AddObject(module, "control_names", names) == -1)
 goto error1;
 return 0;
error2:
 Py_XDECREF(labels);
error1:
 Py_XDECREF(names);
 return -1;
thanks,
julia


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /