Du verwendest in der Klasse TDecodeTrace zwei Objekte, die du besser übergeben solltest:
Delphi-Quellcode:
constructor TDecodeTrace.create(logger:TLogger; pm:TProtMessages);
begin
inherited create(true);
freeOnTerminate := true;
FStream := TMemoryStream.Create;
FerrorLog := logger;
FprotMessages := pm;
end;
Dabei sind FStream, FerrorLog und FprotMessage lokale Felder der Klasse.
Der Destruktor sieht dann so aus:
Delphi-Quellcode:
destructor TDecodeTrace.Destroy;
begin
FStream.Free;
sleep(200); // wozu?
inherited destroy;
end;
Da der Logger und ProtMessage über den Konstruktor übergeben wurden, braucht man die Objekte im Destruktor auch nicht freigeben.
Das liegt dann in der Verantwortung des Aufrufers.