Am Mon, 2003-06-30 um 13.12 schrieb Stefan Hundhammer:
On Sunday 29 June 2003 23:21, Joerg Rossdeutscher wrote:
Nochmal in Kurzfassung: Ich will SEGV's abfangen, das Programm soll weiterlaufen, als wäre nichts gewesen. Und zwar lediglich für die Dauer eines Annotate-Befehls für Perlmagick, weil der auf einen kaputten Font stoßen könnte.
Würdet ihr das hier als einigermaßen saubere Lösung erachten?
Eigentlich nicht...
Wenn Du einen Segfault bekommst, ist ziemlich undefiniert, in welchem Zustand die Variablen Deines Prozesses sind. Etwas völlig anderes zu machen (als das, was Dein Programm normalerweise tut) und das Programm beenden (auch ohne Core) ist zu verantworten. Wenn Du aber dann das gleiche nochmal startest bzw. auch nur das Perl-Modul weiter verwendest, das den Segfault ausgelöst hat, kann sonstwas passieren: In welchem Zustand sind dann die internen Variablen dieses Moduls? Kann man es ggf. schaffen, daß Perl-Referenzen dann in die Pampa zeigen - sozusagen "dangling pointers" in Perl?
OhGottOhGottOhGott...
Du kannst es ausprobieren, aber ich halte das für eine äußerst wackelige Lösung.
Hmmm... betrachten wir mal die Alternativen. Das Programm läuft mehrere Tage Nonstop, um der Datenflut Herr zu werden. Es darf nicht abgebrochen werden. Der SegFault führt dazu, daß mit der nächsten Datei weitergearbeitet wird, die Ressourcen der auslösenden Datei werden nicht weiter genutzt, der Segfault wird ja bemerkt. Diese Ressourcen werden vermutlich "angeschossen" zurückbleiben, das sollte aber von der Menge her vertretbar sein. Da sie nicht mehr genutzt werden, sollten sie nichts mehr anrichten. Natürlich wäre das beste, ImageMagick würde nicht wegbrechen, aber ehrlich gesagt halte ich für völlig unmöglich, alle Fehler bei der Interpretation einer Fontdatei abzufangen, das ist höllisch komplex. Was gäbe es denn noch für Methoden, ein Programm, das sehr viele Daten verarbeitet zu hindern, mittendrin an unverwendbaren Files wegzubrechen? Gruß, Ratti -- -o) fontlinge | Font management for Linux | Schriftenverwaltung in Linux /\\ http://freshmeat.net/projects/fontlinge/ _\_V http://www.gesindel.de https://sourceforge.net/projects/fontlinge/