in reply to Re^3: Memory Leak using Win32::OLE::Variant for a SafeArray passed by Reference
in thread Memory Leak using Win32::OLE::Variant for a SafeArray passed by Reference

Close method undef of Com object causes small deallocation of memory but bulk of problem remains.

$thermo_raw_file->Close; undef $thermo_raw_file;

I have looked for code examples on how to code ClearVariantObject, SafeArrayDestroy, or Win32::OLE::Destroy in perl without much sucess so I am not sure if my failures are based on approach or the wrong syntax.

The $pvarMassList SafeArray changes type from VT_EMPTY to VT_R8 upon successful GetMassListFromScanNum. Could this change in type controlled by the DLL cause perl to loose control of the SafeArray?

Thank you for the help. I appreciate all the suggestions.

Replies are listed 'Best First'.
Re^5: Memory Leak using Win32::OLE::Variant for a SafeArray passed by Reference
by Anonymous Monk on Jun 24, 2014 at 07:39 UTC

    Close method undef of Com object causes small deallocation of memory but bulk of problem remains.

    Did you try Release-ing all the arguments to GetMassListFromScanNum?

    Could this change in type controlled by the DLL cause perl to loose control of the SafeArray?

    I don't think so ; what i've read so far, reference counting is how COM deals with keeping objects alive -- same as perl does ; its unlikely Win32::OLE is creating any circular references (:anymore:), so the problem is likely with MSFileReader...

    You might try VMMap or Virtual Memory Map Viewer to see if you can narrow it down

    say add a pause (scalar readline STDIN; ) before and after GetMassListFromScanNumk and see what you can see :/