Synapse und heaptrc

Alle Fragen zur Netzwerkkommunikation
Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Synapse und heaptrc

Beitrag von Scotty »

Ich habe zwei Wochen in meinem Code (in etwa wie hier) nach der Ursache für SIGSEV beim Beenden gesucht und nichts gefunden (SIGSEV nur dann, wenn ein gethreatetes Netzwerk aktiv war, THttpSend funktioniert). Nachdem ich jetzt heaptrc rausgenommen habe, gibt es keine Fehlermeldung mehr. Ich bin noch nicht ganz davon überzeugt, dass heaptrc wirklich die Ursache sein soll. Deswegen: Habt ihr ähnliche Erfahrungen gemacht?

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Synapse und heaptrc

Beitrag von Euklid »

Hallo,

Scotty hat geschrieben: Habt ihr ähnliche Erfahrungen gemacht?


Ja: Mit der heaptrc ist das Programm empfindlicher gegenüber Speicherfehlern - d.h. es stürtzt beim Auftreten von Speicherfehlern eher ab als ohne heaptrc.

Gruß, Euklid

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Synapse und heaptrc

Beitrag von Hitman »

Um genauer zu sein: wenn unter der Verwendung von heaptrc Speicherabschnitte freigegeben werden, werden sie gleichzeitig überschrieben (ich glaube mit $80, aber das müsste ich nochmal genau nachschlagen *g*). In der Konsequenz kriegt man aus den freigegebenen Speicherstellen auch nichts brauchbares mehr heraus.
Ohne heaptrc hingegen kann dort nach wie vor das selbe stehen, das da vor dem Freigeben des Speichers stand. Hat man also noch einen Pointer dahin (den man nicht auf nil gesetzt hat) und verwendet ihn fröhlich weiter, kann man in vielen Fällen problemlos weiterarbeiten - ein Fehler ist es aber dennoch. Letztlich spielt man damit russisch Roulette ... immerhin könnte der Speicher ja tatsächlich schon überschrieben worden sein, darum hat man ihn ja freigegeben.
Wenn unter Verwendung von heaptrc also mehr bzw. überhaupt Fehler auftreten, dann nicht zu unrecht und man sollte der Sache gründlichst nachgehen.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Synapse und heaptrc

Beitrag von Scotty »

Wenn unter Verwendung von heaptrc also mehr bzw. überhaupt Fehler auftreten, dann nicht zu unrecht und man sollte der Sache gründlichst nachgehen.

So hätte ich das auch befürchtet. Die Frage geht auch mehr in Richtung Synapse, wobei ein THttpSend einwandfrei verläuft, aber TTCPBlockSocket Probleme bereitet. Aber wahrscheinlich stimmt doch noch irgendwas mit meinen Threads nicht.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6213
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Synapse und heaptrc

Beitrag von af0815 »

Scotty hat geschrieben:Die Frage geht auch mehr in Richtung Synapse, wobei ein THttpSend einwandfrei verläuft, aber TTCPBlockSocket Probleme bereitet. Aber wahrscheinlich stimmt doch noch irgendwas mit meinen Threads nicht.

Wenn es gerade beim Beenden passiert, sollte man seine Threadroutinen darauf hin überprüfen, ob die nicht länger laufen als der Hauptthread. Mal überprüfen ob der Hauptthread überhaupt die anderen Thread sauber herunterfährt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten