AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Speicherleck im Indy Server!?
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherleck im Indy Server!?

Ein Thema von heri · begonnen am 5. Jun 2006 · letzter Beitrag vom 5. Jun 2006
Antwort Antwort
heri

Registriert seit: 20. Mär 2006
81 Beiträge
 
Delphi 2006 Enterprise
 
#1

Speicherleck im Indy Server!?

  Alt 5. Jun 2006, 14:29
Ich habe eine Applikation mit einem IndyServer, bei der mir der FastMM Speicherlöcher anzeigt.
Auf der Suche nach dem Fehler habe ich folgenden Code in IdThread.pas gefunden:

initialization
SetThreadName('Main'); {do not localize}
GThreadCount := TIdThreadSafeInteger.Create;

finalization
// This call hangs if not all threads have been properly destroyed.
// But without this, bad threads can often have worse results. Catch 22.
// TIdThread.WaitAllThreadsTerminated;

{$IFDEF IDFREEONFINAL}
//only enable this if you know your code exits thread-clean
Sys.FreeAndNil(GThreadCount);
{$ENDIF}


Nun ja - im initialization gibt's ein TIdThreadSafeInteger.Create, aber im finalization wird dies nur mit einem DebuggerSwitch freigegeben.
Hat das auch schon jemand entdeckt?

Was heisst denn ThreadClean? genügt ein {$DEFINE IDFREEONFINAL} und wo soll ich den am besten hintun?
  Mit Zitat antworten Zitat
guste

Registriert seit: 23. Apr 2006
19 Beiträge
 
#2

Re: Speicherleck im Indy Server!?

  Alt 5. Jun 2006, 15:06
Den Debugger Schalter stellt man in den Projektoptionen Tab Verzeichnisse/Bedingungen abschnitt Bedingungen ein. (siehe Anhang)

Ich kann den geposteten Code bei mir nicht finden. Welche Indy Version benutzt Du?
Miniaturansicht angehängter Grafiken
1_844.jpg  
guste
  Mit Zitat antworten Zitat
heri

Registriert seit: 20. Mär 2006
81 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Speicherleck im Indy Server!?

  Alt 5. Jun 2006, 15:46
Hab's unter ..\Borland\BDS\4.0\source\Indy10\Core im File IdThread.pas (16.3 kB) gefunden.
Thx für deinen Tipp in den Projektoptionen - leider hat's aber nichts gebracht.
seltsam - werde weiterforschen
  Mit Zitat antworten Zitat
guste

Registriert seit: 23. Apr 2006
19 Beiträge
 
#4

Re: Speicherleck im Indy Server!?

  Alt 5. Jun 2006, 16:28
Ich habe bei mir Indy 9, daher konnte ich es nicht finden. Habe aber trotzdem mal in den Quellcode von Indy10 geguckt. Ich denke das dies nicht für Dein Speicherleck verantworlich ist. Die Instanz wird definitiv nur einmal erzeugt und die Freigabe erfolgt automatisch wenn Dein Programm ebenfalls die heiligen Hallen des RAM verlassen muss. Ich finde das nicht gefährlich oder verboten, da mit dieser Klasse überprüft werden soll ob alle Threads die mal erzeugt wurden auch wieder beendet sind. Den Compiler Schalter würde ich übrigens wieder ausschalten, da es im Destructor krachen könnte wenn ein Thread mal nicht beendet werden kann. (z.B. durch ein Deadlock)

Kannst Du denn der Meldung von FastMM vertrauen? (hoffe ich trete keinem auf die Füße )
guste
  Mit Zitat antworten Zitat
heri

Registriert seit: 20. Mär 2006
81 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Speicherleck im Indy Server!?

  Alt 5. Jun 2006, 18:20
Naja, ob "ich FastMM4 vertrauen kann", kann ich nicht beantworten. Ich habe noch zu wenig Erfahrung damit.

Ich weiss nur, wenn ich ein Testprojekt eröffne und folgende beiden Units in das Projektverzeichnis kopiere:
..\BDS\4.0\source\Indy10\System IdStack.pas
..\BDS\4.0\source\Indy10\Core IdThread.pas

diese anschliessend in das Projekt einbinde, zusätzlich in den Projektoptionen IDFREEONFINAL als Bedingung hinzufüge, wird kein Speicherleck mehr angezeigt!

Schon komisch, oder?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz