"Segmentation Fault", wenn VDR in recording.c auf "esyslog("ERROR: can't read from file '%s'", *fileName);" (Zeile 2605) kommt.

  • Etwa so:


    Ein Programm ruft cMarks::Load .

    Das ruft cMarks::Update(void)

    Das ruft Align();

    Das ruft

    cIndexFile IndexFile(recordingFileName, false, isPesRecording);

    Code
    1. Zeile 2597: last = int((buf.st_size + delta) / sizeof(tIndexTs) - 1);
    2. (das ist größer als 0)
    3. Zeile 2604: if (safe_read(f, index, size_t(buf.st_size)) != buf.st_size)
    4. das Lesen geht schief, warum ist mir unklar, möglicherweise ein Netzwerkfehler)
    5. Zeile 2607 index = NULL
    6. Im Objekt "IndexFile" ist also index = NULL und last > 0.


    dann IndexFile.GetClosestIFrame(m->Position());

    Zeile 2822: if (index[Index].independent)

    Hier der "Segmentation Fault", da index == NULL .

    ~ Markus

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.4x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Ich habe Abstürze bei leerer index-Datei beobachtet.

    Aber nur, wenn die Datei 0 Byte hat und vorhanden ist. Wenn sie ganz fehlt, wird sie neu erzeugt.

    Erreichen kann man den Zustand, in dem man während der Index-Generierung "exit" drückt und die Wiedergabe beendet.


    Könnte das, dein Problem sein?

    Sämtliche genannten Zeilennummern stammen cIndexFile::...


    Die Abfrage access(fileName, R_OK)(Zeile 2577) scheint wohl nicht zu reichen.

    Da müsste man wohl mindestens noch auf Grösse >0 prüfen.

    Was bei unvollständigen index-Dateien passiert ist dann auch noch eine Frage. (ist bei mir aber noch nicht aufgetreten)


    Da mein Produktiv-System inzwischen etwas (hust) veraltet ist, wollte ich nicht sofort einen Bugreport aufmachen.

    Gruss
    SHF


  • Danke für die Arbeit. Ich werde es die Tage mal versuchen.


    So wie ich das verstehe sollte der Patch den Absturz beheben, die leere Index-Datei sollte aber nicht regeneriert werden. Mal schauen, was passiert ....

    Gruss
    SHF


  • SHF : Ja, das sollte erstmal nur den Absturz verhindern.

    Um eine leere Indexdatei zu regenerieren sollte in cIndexFile::cIndexFile() die Zeile


    Code
    1. if (!Record && access(fileName, R_OK) != 0) {


    nach


    Code
    1. if (!Record && (access(fileName, R_OK) != 0 || FileSize(fileName) == 0)) {


    geändert werden. Magst du das mal probieren?

  • Wenn ich es schaffe den Fehler zu reproduzieren, mache ich das natürlich.


    Dauert aber ein bisschen, ich bin gerade an was anderem dran.

    Gruss
    SHF


  • Es hat jetzt etwas länger gedauert, als ich wollte, aber das Chaos, was ich beim letzten Update angerichtet hatte, war hartnäckig er als gedacht. Nun spricht aber endlich der Compiler wieder mit mir :gap .


    Den Absturz mit leerer Index-Datei konnte ich nicht reproduzieren. Ausschliessen würde ich Abstürze aber aufgrund des Verhaltens aber nicht.

    Die Aufnahmen werden abgespielt (immer von vorne), aber ausser play/pause geht nichts. "ok" liefert auch keine OSD-Einblendung! Fehlermeldungen gibt es aber keine.

    Patch 1 hat demzufolge (logischer weise) bei mir keine Wirkung.

    Das fehlen jeglicher Fehlermeldungen finde ich etwas merkwürdig, irgendwo müsste doch auffallen, dass kein Index-Daten kommen?



    Patch 2 wirkt wie erwartet und startet die Index-Generierung auch, wenn eine 0 Byte Index-File vorhanden ist.:tup

    Gruss
    SHF