Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Memory Leak bei INDY 10 in der SMTP Komponente? (https://www.delphipraxis.net/76066-memory-leak-bei-indy-10-der-smtp-komponente.html)

xaromz 29. Aug 2006 18:16

Re: Memory Leak bei INDY 10 in der SMTP Komponente?
 
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

emsländer 29. Aug 2006 18:40

Re: Memory Leak bei INDY 10 in der SMTP Komponente?
 
Hi,

Wenn ich das versuche zu compilieren (D2006/Indy10) dann bekomme ich die Fehlermeldung:
[Pascal Fataler Fehler] IndySystem.dpk(29): E2202 Package 'Borland.Delphi' wird benötigt, konnte aber nicht gefunden werden. Wo soll das denn stecken?



Gruss

EL

xaromz 29. Aug 2006 19:01

Re: Memory Leak bei INDY 10 in der SMTP Komponente?
 
Hallo,
Zitat:

Zitat von emsländer
Wenn ich das versuche zu compilieren (D2006/Indy10) dann bekomme ich die Fehlermeldung:
[Pascal Fataler Fehler] IndySystem.dpk(29): E2202 Package 'Borland.Delphi' wird benötigt, konnte aber nicht gefunden werden. Wo soll das denn stecken?

Den Fehler bekomme ich auch. Hört sich irgendwie nach .Net an :gruebel: . INDY 10 ist ja für beide Plattformen.
Lösung hab' ich leider keine. Ich habe einfach den Suchpfad meines Projekts angepasst und kompiliere die Units in meine Anwendung mit rein.

Gruß
xaromz

jbg 29. Aug 2006 19:15

Re: Memory Leak bei INDY 10 in der SMTP Komponente?
 
Zitat:

Zitat von emsländer
Wenn ich das versuche zu compilieren (D2006/Indy10) dann bekomme ich die Fehlermeldung:

Mir persönlich gefällt der Quellcode zu Indy 10 überhaupt nicht (deswegen keine Hilfe von mir). Anfangs habe ich da sogar mitentwickelt. Aber nachdem dann C# ohne die SysUtils, Classes, ... Units unterstützt werden sollte, und dafür dann der gesamte Code so umgemodelt wurde dass alles nur noch aus Zwichenschicht-Aufrufen bestand (die ausgetauscht werden können), wurde mir das ganze dann doch zu bunt. Und jetzt wo der gesamte Code (in meinen Augen) völlig unleserlich geworden ist, wurde dann doch ein Neustart für eine C# only Version (in C#) gestartet. So kann man auch ein Projekt kaputt machen.

emsländer 20. Sep 2006 08:05

Re: Memory Leak bei INDY 10 in der SMTP Komponente?
 
Zitat:

Zitat von xaromz
Hallo,
Zitat:

Zitat von emsländer
Wenn ich das versuche zu compilieren (D2006/Indy10) dann bekomme ich die Fehlermeldung:
[Pascal Fataler Fehler] IndySystem.dpk(29): E2202 Package 'Borland.Delphi' wird benötigt, konnte aber nicht gefunden werden. Wo soll das denn stecken?

Den Fehler bekomme ich auch. Hört sich irgendwie nach .Net an :gruebel: . INDY 10 ist ja für beide Plattformen.
Lösung hab' ich leider keine. Ich habe einfach den Suchpfad meines Projekts angepasst und kompiliere die Units in meine Anwendung mit rein.

Gruß
xaromz

Ich stell mich jetzt mal blöd :gruebel:

Wie?


Gruss

EL

emsländer 20. Sep 2006 08:12

Re: Memory Leak bei INDY 10 in der SMTP Komponente?
 
Zitat:

Zitat von xaromz
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

muss ich den Teil:
Delphi-Quellcode:
  {$IFDEF IDFREEONFINAL}
  Sys.FreeAndNil(GStackCriticalSection);
  {$ENDIF}
behalten, oder ersetzen?


Gruss

EL

xaromz 20. Sep 2006 08:40

Re: Memory Leak bei INDY 10 in der SMTP Komponente?
 
Hallo,
Zitat:

Zitat von emsländer
muss ich den Teil:
Delphi-Quellcode:
  {$IFDEF IDFREEONFINAL}
  Sys.FreeAndNil(GStackCriticalSection);
  {$ENDIF}
behalten, oder ersetzen?

Ersetzen:
Delphi-Quellcode:
initialization
  GDestroying := False;
  GStackClass :=
   {$IFDEF LINUX}     TIdStackLinux;  {$ENDIF}
   {$IFDEF MSWINDOWS} TIdStackWindows; {$ENDIF}
   {$IFDEF DOTNET}    TIdStackDotNet; {$ENDIF}
  GStackCriticalSection := TIdCriticalSection.Create;

finalization
  GDestroying := True;
  if GInstanceCount = 0 then
    Sys.FreeAndNil(GStackCriticalSection);
end.
Gruß
xaromz

emsländer 20. Sep 2006 08:45

Re: Memory Leak bei INDY 10 in der SMTP Komponente?
 
Zitat:

Zitat von xaromz
Hallo,
Zitat:

Zitat von emsländer
muss ich den Teil:
Delphi-Quellcode:
  {$IFDEF IDFREEONFINAL}
  Sys.FreeAndNil(GStackCriticalSection);
  {$ENDIF}
behalten, oder ersetzen?

Ersetzen:
Delphi-Quellcode:
initialization
  GDestroying := False;
  GStackClass :=
   {$IFDEF LINUX}     TIdStackLinux;  {$ENDIF}
   {$IFDEF MSWINDOWS} TIdStackWindows; {$ENDIF}
   {$IFDEF DOTNET}    TIdStackDotNet; {$ENDIF}
  GStackCriticalSection := TIdCriticalSection.Create;

finalization
  GDestroying := True;
  if GInstanceCount = 0 then
    Sys.FreeAndNil(GStackCriticalSection);
end.
Gruß
xaromz

tx

und wie nun compilieren?

Gruss

EL

emsländer 20. Sep 2006 12:17

Re: Memory Leak bei INDY 10 in der SMTP Komponente?
 
Zitat:

Zitat von emsländer
Zitat:

Zitat von xaromz
Hallo,
Zitat:

Zitat von emsländer
muss ich den Teil:
Delphi-Quellcode:
  {$IFDEF IDFREEONFINAL}
  Sys.FreeAndNil(GStackCriticalSection);
  {$ENDIF}
behalten, oder ersetzen?

Ersetzen:
Delphi-Quellcode:
initialization
  GDestroying := False;
  GStackClass :=
   {$IFDEF LINUX}     TIdStackLinux;  {$ENDIF}
   {$IFDEF MSWINDOWS} TIdStackWindows; {$ENDIF}
   {$IFDEF DOTNET}    TIdStackDotNet; {$ENDIF}
  GStackCriticalSection := TIdCriticalSection.Create;

finalization
  GDestroying := True;
  if GInstanceCount = 0 then
    Sys.FreeAndNil(GStackCriticalSection);
end.
Gruß
xaromz

tx

und wie nun compilieren?

Gruss

EL

- push -

Wie muss ich nun verfahren, um die Indylib neu zu bauen?

Gruss

EL

emsländer 16. Okt 2006 15:04

Re: Memory Leak bei INDY 10 in der SMTP Komponente?
 
- ich pushe dieses Thema noch einmal, weil Borland einer Anfrage nicht nachkommt und auf den kostenpflichtigen Support verweist. -

Zitat:

Zitat von emsländer
Zitat:

Zitat von emsländer
Zitat:

Zitat von xaromz
Hallo,
Zitat:

Zitat von emsländer
muss ich den Teil:
Delphi-Quellcode:
  {$IFDEF IDFREEONFINAL}
  Sys.FreeAndNil(GStackCriticalSection);
  {$ENDIF}
behalten, oder ersetzen?

Ersetzen:
Delphi-Quellcode:
initialization
  GDestroying := False;
  GStackClass :=
   {$IFDEF LINUX}     TIdStackLinux;  {$ENDIF}
   {$IFDEF MSWINDOWS} TIdStackWindows; {$ENDIF}
   {$IFDEF DOTNET}    TIdStackDotNet; {$ENDIF}
  GStackCriticalSection := TIdCriticalSection.Create;

finalization
  GDestroying := True;
  if GInstanceCount = 0 then
    Sys.FreeAndNil(GStackCriticalSection);
end.
Gruß
xaromz

tx

und wie nun compilieren?

Gruss

EL


Wie muss ich nun verfahren, um die Indylib neu zu bauen?

Gruss

EL



Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz