[C++-sig] Memory Leaks In VS.NET 2003 With BOOST_PYTHON_MODULE

Ralf W. Grosse-Kunstleve rwgk at yahoo.com
Mon Oct 10 21:06:42 CEST 2005


--- mjkeyes at sbcglobal.net wrote:

> Ralf (et. al),
> 
> (note - I hope my newsgroup reader doesn't wrap all this in one line)
> 
> I've been playing around with this and I'm still thinking boost leaks
> memory in an embedded and extended application.  I use Visual Leak
> Detector 1.0 to track memory leaks, and here is where the leak comes
> from (in my code):
> ...
> If I insert VLDDisable() before this class_ block and VLDEnable() after
> (which temporarily disables the leak detection for this function call),
> I get zero leaks.  With it turned on, here is what I see (repeated 17
> times):
> ...
> d:\devl\muds\testbed\completelibtest\thirdlibtest\lib\pythoninputhandler
> .h (153): init_module_PyInputHandler
>     0x10006C2B (File and line number not available):
> boost::python::detail::exception_handler::operator=
>     0x1000EC23 (File and line number not available):
> boost::python::detail::init_module
>     0x1E0682B1 (File and line number not available): PyImport_FindModule
>     0x48747570 (File and line number not available): (Function name
> unavailable)
>   Data:
> 	... (whatever data leaked)

I believe these leaks are not actually leaks, but a documented
(http://www.boost.org/libs/python/todo.html) feature of Boost.Python, directly
connected to the lack of support for PyFinalize(). I think what you are seeing
as leaks are actually just entries in the global converter registry. These are
one-time static allocations. Since you cannot dlopen the same module multiple
times there is no danger that these allocations become a real problem.
See also: boost/libs/python/src/converter/registry.cpp

Why is PyFinalize() support missing? -- Simply because the groups who invested
money into Boost.Python development had no interest in embedding.

To find real leaks, please consider my very simple approach of calling the code
with the suspected problem in an infinite loop while monitoring the memory
allocation of the process. Simple, quick, very effective, works the same on all
platforms. I've done it many times, coincidentally a couple of days ago while
testing new low-level code. I didn't see any real leaks.

Cheers,
        Ralf



		
__________________________________ 
Yahoo! Music Unlimited 
Access over 1 million songs. Try it free.
http://music.yahoo.com/unlimited/



More information about the Cplusplus-sig mailing list