New submission from Prashant Kurnawal: I have embedded python3.3 in my application. I got a crash when I ran a python script containing sample TK window creation code in it. On interpreter shutdown, all strings are released (through _PyUnicode_ClearStaticStrings). (I Found this description in one of the comments of object.h header file) When I tried to debug python source, I found a defect in _PyUnicode_ClearStaticStrings() method. Existing function definition in python3.3 source (unicodeobject.c) is as follows
void _PyUnicode_ClearStaticStrings() { _Py_Identifier *i; for (i = static_strings; i; i = i->next) { Py_DECREF(i->object); i->object = NULL; i->next = NULL; } } Here, for loop will not free all the static strings. It will free only the first static string in the list. This loop needs to be corrected. I corrected the loop in following way and its working fine for me. void _PyUnicode_ClearStaticStrings() { _Py_Identifier *i; while(static_strings->next != NULL) { i = static_strings; static_strings = static_strings->next; Py_DECREF(i->object); i->object = NULL; i->next = NULL; } Py_DECREF(static_strings->object); static_strings->object = NULL; static_strings = NULL; } Is this a bug or it is done so intentionally..? ---------- components: None files: unicodeobject.c messages: 179432 nosy: benjamin.peterson, brett.cannon, georg.brandl, goodger, larry, prashantkurnawal, python-dev priority: normal severity: normal status: open title: Bug in _PyUnicode_ClearStaticStrings() method of unicodeobject.c type: crash versions: Python 3.3 Added file: http://bugs.python.org/file28646/unicodeobject.c _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue16906> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com