Segfault: Radio Plugin oder VDR?

  • In der channels.conf sind eine Menge Radio-Kanäle und ich versuche einam VDR Absturz auf die Spur zu kommen. Dabei wird im Script einfach nur über alle Radio-Kanäle iteriert. Sämtliche Kanäle haben keine EPG Daten.

    Bash
    #!/bin/bash
    
    svdrpsend chan 328
    
    for i in $(seq 328 623);
    do
        sleep 4
        svdrpsend chan $i
    done


    Ohne Radio Plugin läuft alles stabil. Mit dem Radio Plugin bekomme ich irgendwann immer diesen Backtrace:


    Die Zeile radiocheck.c:88 sieht ziemlich unverdächtig aus

    Code
    86    LOCK_SCHEDULES_READ
    87    static cStateKey SchedulesStateKey;
    88    const cSchedules *scheds = cSchedules::GetSchedulesRead(
                SchedulesStateKey);


    Ich weiß nicht, ob das Problem im Radio Plugin ist, oder das Radio Plugin ein Problem im VDR triggert.

  • Das ist doch ein doppelter Lock auf das gleiche Objekt, oder ?

    LOCK_SCHEDULES_READ ist doch ein Makro, dass das gleiche macht, wie GetSchedulesRead().

    Teste mal ohne LOCK_SCHEDULES_READ.

  • Ich habe mal in den Code reingeschaut:

    Der erste Weg hat nicht funktioniert, weil da nirgends ein SchedulesStateKey.Remove() im Code drin ist. Der Lock wird also nie frei gegeben.

    Und das war vermutlich auch die Ursache des Crash, die vielen nicht frei gegeben Locks. Alleine der doppele Lock kann es nicht sein, ist zwar nicht sinnvoll, sollte aber nicht crashen, solange auch beide wieder frei gegeben werden.


    Mit dem Makro funktioniert es, weil das den Lock am Ende des Blocks automatisch frei gibt.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!