libxml2: xmlParseFile bricht mit "error : Interrupted function call" ab
Hallo,
ich habe ein Problem mit libxml2 in Zusammenhang mit XMMS. Ich programmiere gerade an einem XMMS-Plugin, dazu muss ich eine XML-Datei auslesen (z.B. diese hier).
Das funktioniert in meinem Einzelprogramm sehr gut (ich muss der libxml2 Funktion xmlParseFile() nur die URL übergeben, die holt sich dann das XML-Dokument selbstständig aus dem Netz).
Wenn ich den Code jetzt in das XMMS-Plugin übertragen will, dann wird allerdings xmlParseFile immer unterbrochen und schreibt folgendes als Fehlermeldung auf das Terminal:
Code:
error : Interrupted function call
I/O warning : failed to load external entity "http://musicbrainz.org/ws/1/track/?type=xml&artist=%54%68%65%20%46%69%65%72%79%20%46%75%72%6e%61%63%65%73&limit=1&title=%41%75%74%6f%6d%61%74%69%63%20%48%75%73%62%61%6e%64"
.
Kopiere ich diese URL (http://musicbrainz.org/ws/1/track/?t...73%62%61%6e%64) dann in mein Testprogramm, verrichtet xmlParseFile seinen Dienst ganz normal.
So, wenn ich nun in meinem XMMS-Plugin die URL in ein "file:///pfad/zu/datei" ersetze (d.h. ich will mit xmlParseFile eine lokale Datei parsen), dann geht das ohne Probleme!
Ich vermute das Problem jetzt an zwei Stellen: entweder kompiliere ich mein XMMS-Plugin falsch oder XMMS sendet an seine Plugins irgendwelche Signale, die dann wiederum eine Funktion in libxml2 (eventuell die, die das XML-Dokument aus dem Netz holt) unterbrechen.
Für die zweite These spricht übrigens folgende Beobachtung: jedes sleep() in dem XMMS-Plugin (bzw. allgemein in allen XMMS-Plugins) wird unterbrochen und kehrt schon noch kurzer Zeit < 1 sec. in den Plugin-Thread zurück.
Naja, was ich jetzt gerne wissen würde ist:
1. wie kommt der Fehler in xmlParseFile() zustande bzw.
2. wie finde ich das Signal heraus, dass z.B. sleep() unterbricht?
Bereits vielen Dank fürs Lesen.
Gruß, Florian
PS: in den Quellcode zu libxml2 und XMMS habe ich übrigens auch schon reingeschaut. Beim ersteren blicke ich aber überhaupt nicht durch, da würde die Einarbeitung wohl mehrere Wochen dauern, den XMMS Quellcode nehme ich mir jetzt noch mal vor.