Menu

Workaround for FinalizeMemoryManager

Maxx
2013-11-12
2014-02-27
  • Maxx

    Maxx - 2013-11-12

    A lot Delphi versions have a problem with uninstalling the memory manager.
    For more details please look at QC105766
    (http://qc.embarcadero.com/wc/qcmain.aspx?d=105766)

    I suggest the enclosed patch for a proper uninstall the MM.

    Use the "ExitProcessProc" (unit system.pas) to uninstall the MM instead of
    the finalization in unit FastMM.pas, because the unit finalization is too
    early.

    Enjoy

    Ma2xx

     

    Last edit: Maxx 2013-11-12
  • Pierre le Riche

    Pierre le Riche - 2013-11-14

    Thanks Maxx,

    I've scanned through your changes and it looks good. I just need to test first to make sure there are no unwanted side-effects.

    Best regards,
    Pierre

     
  • Maxx

    Maxx - 2014-02-27

    Hello Pierre,

    the suggested workaround has one problem: The ExitProc will not called inside a DLL, because the code in system.pas ...
    if InitContext.DllInitState <> 0 then
    ExitDll(@InitContext);
    is before ...
    if Assigned(ExitProcessProc) then
    ExitProcessProc;

    The (workaround) FastMM of the DLL do not call FinalizeMemoryManager. Maybe we make a decision inside FastMM.pas finalization part to call FinalizeMemoryManager for a DLL (if IsLibrary...). But than we have the old problem again, that FreeMem(PreferredLanguagesOverride) will be called after FinalizeMemoryManager. For this case we need again Embarcadero System.QC105766.pas for the DLL :-(

    Regards
    ma2xx

     

Log in to post a comment.