Hallo,
folgende Änderungen in der Datei idStack.pas sind notwendig, sonst kann es knallen (was ja der Grund für den Leak ist):
Nach Implementation:
Delphi-Quellcode:
var
GInstanceCount: Integer = 0;
GStackCriticalSection: TIdCriticalSection;
wird zu
Delphi-Quellcode:
var
GInstanceCount: Integer = 0;
GStackCriticalSection: TIdCriticalSection;
GDestroying: Boolean; // Neue Variable
Die Methode TIdStack.DecUsage muss erweitert werden:
Delphi-Quellcode:
...
finally GStackCriticalSection.Release; end;
// Auf Destroying reagieren
if (GInstanceCount = 0) and GDestroying then
Sys.FreeAndNil(GStackCriticalSection);
end;
und am Ende:
Delphi-Quellcode:
finalization
GDestroying := True;
if GInstanceCount = 0 then
Sys.FreeAndNil(GStackCriticalSection);
//Edit: Meine Lösung gilt für Version Version 10, jbg's für Version 9.
Gruß
xaromz