www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 1551] New: 80kb memory leak with DLLs

http://d.puremagic.com/issues/show_bug.cgi?id=1551

           Summary: 80kb memory leak with DLLs
           Product: D
           Version: 1.022
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: minor
          Priority: P4
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: thecybershadow gmail.com


Loading a bare-bones DLL and unloading it leaves a memory leak.

=== DLL source ===
import std.c.windows.windows;

HINSTANCE g_hInst;

extern (C)
{
        void gc_init();
        void gc_term();
        void _minit();
        void _moduleCtor();
        void _moduleUnitTests();
}

extern (Windows)
BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved)
{
    switch (ulReason)
    {
        case DLL_PROCESS_ATTACH:
            gc_init();                  // initialize GC
            _minit();                   // initialize module list
            _moduleCtor();              // run module constructors
            _moduleUnitTests();         // run module unit tests
            break;

        case DLL_PROCESS_DETACH:

            gc_term();                  // shut down GC
            break;

        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
            // Multiple threads not supported yet
            return false;
    }
    g_hInst=hInstance;
    return true;
}
=== end of DLL source ===

After loading, the process' "private bytes" figure grows by 204-220 KB. After
the DLL is unloaded, only 128-132 KB is freed, leaking about 76 KB of memory
every time.

I have eliminated other factors (a link in the loader) by using a DLL compiled
in another language with the same loader test program.


-- 
Oct 07 2007