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

Reply via email to