vdr-2.2.0 mit graphtftng und remotetimers hängt bei Öffnen der Aufzeichungen

  • Hi,


    auf meinem RPI2 habe ich den vdr-2.2.0 mit folgenden Plugins installiert
    * vdr-eepg Patch
    * graphtftng (git)
    * remotetimers 1.0.2
    * rpihddevice (git)
    * svdrpservice (1.0.0)
    * streamdev-client (git)
    Das /video0 Verzeichnis ist per NFSv4 eingebunden.


    Sobald grapftftng und remotetimers gemeinsam geladen werden tritt das Problem auf:
    Wenn ich gleich nach dem Start auf Menü -> Aufzeichnungen(4) klicke, hängt sich der VDR in 9 von 10 Fällen auf. Lasse ich den vdr eine Weile laufen und öffne dann das Menü, dann klappt es in 9 von 10 Fällen. Im Log vom VDR findet sich trotz "-l 3" in beiden Fällen nichts Auffälliges.


    Nach 60 Sekunden schlägt der Watchdog Timer zu und der VDR startet neu.


    Code
    /usr/local/src/vdr-2.2.0-eepg/vdr --no-kbd -v /video0 -l 3 -w 60 -c /etc/vdr -L /usr/vdr/lib --lirc=/dev/lircd \
    -P 'rpihddevice --display=5' -P 'graphtftng -d /dev/fb0' -Psvdrpservice -Premotetimers -Pstreamdev-client


    Sobald ich entweder das graphtftng oder remotetimers Plugin nicht lade, läuft der VDR fehlerfrei. Ich möchte aber gern beide zusammen benutzen...


    Falls jemand eine Idee warum es klemmt, wäre ich sehr dankbar.


    Jarod

    Gehäuse: Intertech 4U 4416, Board: Supermicro X11SAE; Kathrein EXIP418; OS: Ubuntu 18.04; Plugins: xineliboutput, satip, burn, femon, live, streamdev-server, text2skin:anthra-1920

    2x RPI2/3; Plugins: rpihddevice; videodir via NFS


  • Ich hab mich da mal mit dem gdb ans Werk gemacht und mir einen Backtrace gezogen, sobald der VDR hängen bleibt bem Öffnen des Aufzeichnungsmenüs.
    Der letzte Aufruf auf dem Stack ist ein Mutex. Der letzte Aufruf eines Mutex kommt beim graphTFT dann aus der Fuktion OsdClear...


    Ich bin kein Held, was Programmierung angeht, aber kann es sein, dass das remotetimers Plugin sich ein Ressource schnappt, die das GraphTFTng gern hätte? Das würde das Ganze erklären. So wie ich das sehe, verwendet das remotetimers Plugin nirgendwo einen Mutex.
    Ach ja. Wenn das Aufrufen des Aufnahmemenus geklappt hat, dann kam der letzte Mutex aus OsdCurrentItem vom GraphTFTng... (Ich hoffe zumindest, dass ich mich hier nicht irre.)


    Hier der Stacktrace:



    Jarod

    Gehäuse: Intertech 4U 4416, Board: Supermicro X11SAE; Kathrein EXIP418; OS: Ubuntu 18.04; Plugins: xineliboutput, satip, burn, femon, live, streamdev-server, text2skin:anthra-1920

    2x RPI2/3; Plugins: rpihddevice; videodir via NFS


    Einmal editiert, zuletzt von Jarod ()

  • Also...
    nachdem ich jede Menge isyslog Aufrufe in den Quelltext vom graphtftng geschrieben hatte und mir das Ergebnis lange betrachtet habe, glaube ich, dass es ein Timing Problem ist.
    Ich vermute, dass der Mutex nicht gelöscht wird bevor das Plugin versucht ihn erneut zu setzen.
    Ich konnte im gesamten Code vom graphTFTng Plugin keine einzige Stelle finden, an welcher der Lock entfernt wurde.
    Ich vermute es geschieht über den

    Code
    wait(updateIn);

    in Zeile 557 in der status.c. Das ruft, so vermute ich die Funktion "cGraphTFTDisplay::wait" auf, in der es den Aufruf

    Code
    _doUpdate.TimedWait(_mutex, waitStep);

    gibt. ... und ich vermute weiter, dass dieser aus der thread.c des VDR vererbt wurde.


    Alles in Allem hat bei mir dann Folgendes (vorerst) geholfen:


    Der Wert scheint im ersten Moment recht hoch. Er funktioniert aber.
    Ich habe keine Ahnung, ob das remotetimers Plugin mit dazu beiträgt, dass das Einlesen der OsdItems im graphTFTng so lange dauert, denn es liest sie auch alle ein.
    Ich habe auch nicht ganz verstanden, wie das graphTFTng Plugin den updateIn Wert berechnet. Es scheint mit der Zeit zu tun zu haben, die es benötigt das OSD zu zeichnen.


    Ich würde mich freuen, wenn mir jemand erklären könnte, ob das was ich hier vermute völliger Blödsinn ist, oder ob ich wenigstens teilweise richtig liege.



    Liebe Grüße
    Jarod.

    Gehäuse: Intertech 4U 4416, Board: Supermicro X11SAE; Kathrein EXIP418; OS: Ubuntu 18.04; Plugins: xineliboutput, satip, burn, femon, live, streamdev-server, text2skin:anthra-1920

    2x RPI2/3; Plugins: rpihddevice; videodir via NFS


  • Hi,


    ja genau ein TimedWait gibt den Mutex frei, dass passiert in wait da dort die Haupt-schliefe nichts macht dadurch die Ressourcen 'frei' sind und von Status Interface geändert werden können.


    Wie das mit dem Remotetimer Plug zusammenhängt sehe ich gerade noch nicht. Interessant wäre zu sehen wo die anderen Threads in dem Moment stehen.
    Kann du den VDR mal mit SIGSEG abschießen sobald er hängt und den BT aller Threads posten?


    Jörg

  • Kann du den VDR mal mit SIGSEG abschießen


    Bevor der angesprochene suchen muss...SIGSEGV meint der Kollege ;)


    Ciao Louis

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!