Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Deadlock in TComponent.Destroy (https://www.delphipraxis.net/157454-deadlock-tcomponent-destroy.html)

mquadrat 12. Jan 2011 13:54

Delphi-Version: 2007

Deadlock in TComponent.Destroy
 
Ich beobachte bei einem Unit-Test aktuell ein - für mich - seltsames Verhalten. Ich habe eine TObjectlist, die den Ownership für die enthaltenen Objekte übernimmt. Entferne ich eines der Objekte aus der Liste wird auch brav der Destruktor aufgerufen. Wenn ich nun über inherited auch den Destruktor von TComponent aufrufe verarbschiedet sich die Ausführung ins Nirvana. 0% CPU Auslastung, keine Änderung im Speicherverbrauch. Der Prozess lässt sich nur nur mit Gewalt schließen. Egal ob im Debugging oder normal.

Jemand eine Idee, wo ich suchen soll? Ist ja immer leichter, wenn man zumindest eine grobe Richtung hat ;)

rollstuhlfahrer 12. Jan 2011 13:57

AW: Deadlock in TComponent.Destroy
 
Mal mit F7 in den Destructor springen und schauen.

mquadrat 12. Jan 2011 14:07

AW: Deadlock in TComponent.Destroy
 
Hilft nicht wirklich. Bleibt hinter der dem inherited stehen. Allerdings werden da noch haufenweise andere - abhängige - Objekte freigegeben. Wird mir also nichts übrig bleiben als solange Teile zu entfernen, bis es nicht mehr passiert.

rollstuhlfahrer 12. Jan 2011 14:13

AW: Deadlock in TComponent.Destroy
 
dann musst du ein paar mehr Informationen liefern. So pauschal ist das halt nicht zu beantworten.

Bernhard

mquadrat 12. Jan 2011 14:30

AW: Deadlock in TComponent.Destroy
 
Ja, das ist mir klar. Hatte die bescheidene Hoffnung, dass jemand vll mal ein ähnliches Problem gehabt hat.

Werde den Code jetzt erst mal auseinander nehmen. Im Produktivsystem tritt der Fehler nicht auf.

Trotzdem danke.

stahli 12. Jan 2011 15:51

AW: Deadlock in TComponent.Destroy
 
Gibt es über eine Referenz (Variable/Liste) einen (vielleicht sogar schreibenden) Zugriff auf ein bereits freigebenes Objekt? Dies kann ja durch "überwachte Ausdrücke" zu Seiteneffekten führen - vielleicht auch durch Unit-Testing?

mquadrat 12. Jan 2011 15:53

AW: Deadlock in TComponent.Destroy
 
mhh sollte eigentlich nicht. Ich glaube heute wechsel ich erst mal das Projekt. Kann den Testfall schon nicht mehr sehen :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 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