New submission from Martin Dunschen <mdunsc...@gmail.com>: I found a number of 'handle leaks' in the core code to embed python into a C/C++ application on windows. To reproduce: The simplest possible embedded application only calls:
#include <Python.h> void entry() { Py_Initialize(); Py_Finalize(); } I found (but this does not seem important to the problem) that when the above code is compiled into a Windows DLL, and from another simple app this DLL is loaded, the entry function is called and then the DLL is unloaded, the number of handles held by the application is increasing (by 3). Calling the steps "LoadLibrary, entry, FreeLibrary" in a loop will increase the number of held handles by 3 every time. I can propose fixes for these 3 leaks, please find attached in the zip file patches for the files I have fixed. But there are some issues remaining: PyEval_InitThreads allocates 'interpreter_lock', but there is nothing in the API that allows you to free this lock again. Should there maybe a function, in the API void PyEval_FinishThreads(void) { if (!interpreter_lock) return; PyThread_free_lock(interpreter_lock); } That would get rid of another handle leak if a DLL embedding python would use PyEval_InitThreads. In a specific DLL I am debugging just now I observe 2 more handle leaks (The 4 I report here, and 2 more I have not yet found). I hope my report is comprehensive and can be reproduced. I am happy to be of assistance if there are any questions. Martin ---------- components: Interpreter Core messages: 120782 nosy: martind priority: normal severity: normal status: open title: Embedded python, handle (memory) leak type: resource usage versions: Python 2.5, Python 2.6, Python 2.7 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue10363> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com