Am Sa, den 27.12.2003 schrieb Andre Heine um 19:33:
Darum habe ich meine obigen Aussagen getroffen, dass dazu eben "try/catch" benutzt wird.
Ne, echt, kannst du knicken. Was du beschreibst, sind kontrollierte Abbrüche durch deinen Code selbst - auch wenn du ihn nicht so geschrieben hast, der Compiler sorgt dafür. Ich rede davon, daß eine defekte Schrift an freetype übergeben wird (Daß sie defekt ist, kann ich ja nicht prüfen), woraufhin freetype irgendeine (defekte) Anweisung im Fontcode ohne Prüfung ausführt und erstmal getreulich versucht, sagenwirmal 5 Okobyte RAM von der Adresse $IRSINN nach $WAHNSINN zu verschieben. Selbstredend gehört dieser Speicher nicht freetype. Der Prozessor selbst bricht an dieser Stelle die Verarbeitung des Codes wegen einer Speicherschutzverletzung ab. Alles, was der Code bis dahin ausgeführt hat, wird nicht sauber aufgeräumt. Man kann das in der Tat abfangen, indem man %SIG verbiegt, und das habe ich auch getan. Du hast dann aber schwerwiegende Nebeneffekte: Der Speicher könnte zulaufen, oder perl hat so "einen mitgekriegt", daß es 10 Zeilen später bei einer korrekten Anweisung wegbricht. Erst das Beenden des Prozesses entfernt "sauber" alles aus dem Speicher, was da jetzt krumm und schief ist. Daher die Idee: Ein Prozess startet einen zweiten Prozess, der die eigentliche Arbeit leistet. Wenn dieser Prozess Segfaultet, lass ihn wegbrechen - der erste Prozess merkt das, kennt auch die verursachende Datei und forkt einen neuen Prozess, der mit der nächsten Datei fortfährt. Ende gut, alles gut. Außer, daß es bis jetzt nicht läuft. Vielleicht darf ich die geneigten Leser kurz darauf hinweisen, daß mein Programm in der derzeitigen Form gar keine Segfaults verursacht, der zweite Prozess wird einfach zu Testzwecken mit einer 30%-Chance beendet: if rnd(100)<30 then print "Gaaanz böser Fehler"; exit; Mein Problem: Warum stirbt der Parent-Prozess mit? Wieso? Das sollte so nicht sein. 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/