Synapse und heaptrc
-
- 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
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?
-
- 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
Hallo,
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
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
-
- 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
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.
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.
-
- 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
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.
- 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
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).