Segfault mit graphlcd-0.1.2-pre4 und vdr > 1.3.18

  • Hallo,


    ich habe Probleme mit graphlcd-0.1.2-pre4 und vdr >1.3.18. Wenn man das Abspielen einer Aufnahme oder die MP3-Wiedergabe mit der "Exit"-Taste bendet, kommt es ab und zu zu einem Segmentation fault.


    Näher untersucht habe ich den Crash im Zusammenhang mit dem Beenden einer MP3-Wiedergabe. In vdr-Versionen ab 1.3.19 (alle getestet bis 1.3.22) gibt es einen Segmentation fault, mit folgendem Backtrace:

    Code
    (gdb) bt
    #0  0x08a150f8 in ?? ()
    #1  0x403797ef in cGraphLCDState::GetReplayState() (this=0x89cb490) at player.h:72
    #2  0x40364d6a in cGraphLCDDisplay::Action() (this=0x4037fb80) at display.c:372
    #3  0x080dbed0 in cThread::StartThread(cThread*) (Thread=0x4037fb80) at thread.c:227
    #4  0x400a20f0 in pthread_start_thread () from /lib/libpthread.so.0
    #5  0x402bcc77 in clone () from /lib/libc.so.6


    vdr.1.3.18 scheint das Problem nicht zu haben, jedenfalls ist es mir auch nach sehr vielen Versuchen nicht gelungen, es zu reproduzieren.

    Ist das anderen hier auch schon aufgefallen?
    Hat jemand einen Vorschlag, wie könnte man dem Problem noch beikommen könnte?


    Gruss,


    Wolfgang

    MSI C847MS-E33, Cine S2 6.0, Zotac GT630 (GK208), dual boot
    Work: yaVDR 0.7 ansible Ubuntu 22.04. Backup: yaVDR 0.5 Ubuntu 12.06



  • Dieser Absturz im zusammenhang mit mp3 lässt sich hier reproduzieren.
    Allerdings normales Playback, Muggle, Image verhalten sind normal...


    Scheinbar sind nochmehr Stellen durch die Umstellung des VDR auf Verwendung von Rückgabewerte die Threadsafe sind betroffen.


    Siehe auch http://www.vdr-portal.de/board/thread.php?threadid=30870


    Cu,
    Andreas

  • @Hulk:


    Der Absturz bei MP3 tritt im Vergleich zu den anderen relativ häufig auf. Bei viel Geduld mit sehr vielen Versuchen bekommt man aber auch den Absturz bei replay zu sehen. Oder dann, wenn man ihn absolut nicht gebrauchen kann, wenn z.B. gerade eine Aufnahme läuft :)


    Ich werde mir den Code des graphlcd-Plugins mal ansehen, vielleicht fällt mir ja etwas auf.


    Wolfgang

    MSI C847MS-E33, Cine S2 6.0, Zotac GT630 (GK208), dual boot
    Work: yaVDR 0.7 ansible Ubuntu 22.04. Backup: yaVDR 0.5 Ubuntu 12.06


  • Hi,
    hmm, ueberraschenderweise hab ich das Problem mut dem GLCD-Plugin 0.1.1 nicht.
    Wie sind denn die Einstellungen beim mp3-plugin, d.h. laeuft z.B. der Hintergrundscan, Pegelabgleich, ... ?
    Es gab auch einen Bug (ebenfalls nicht threadsafe) beim mp3-plugin, wenn es z.B. die Message "connecting Streamserver ..." anzeigte (ist inzwischen behoben).
    Gruss
    Burkhardt

  • Hi,


    ich habe die History des VDR als Stichwortgeber genommen :



    und dabei noch ein weitere Stelle idenifiziert :



    Das Problem was ich habe, ist das dies ein hochgradiges Laufzeitproblem ist.
    Mit dem Patch wird mir wenn der VDR im debugger läuft keine Segfault mehr geworfen, ohne schon. Allerdings wenn der VDR solo läuft kommt es trotzdem zum Segfault. Der per coredump angezeigte backtrace zeigt mir nur totalen Blödsinn an, das der Fehler vermutlich durch überschreiben des Stack zustande kam, allerdings ist Ankerpunkt immer cGraphLCDState::GetReplayState()


    Cu,
    Andreas

  • Ich werde versuchen, heute nachmittag den Patch mal zu testen. Allerdings muss ich gleich zu einem Geburtstagsfrühstück, vielleicht ist es besser, danach nichts mehr am PC zu machen.


    Wolfgang

    MSI C847MS-E33, Cine S2 6.0, Zotac GT630 (GK208), dual boot
    Work: yaVDR 0.7 ansible Ubuntu 22.04. Backup: yaVDR 0.5 Ubuntu 12.06


  • Hi,


    jetzt wird es mystisch, ich habe noch eine Stelle geändert und ich kann keine "Standalone" Seqfaults mehr reproduzieren. Allerdings szCurrent&sztotal sind vom typ std::string, eigentlich Klassen mit eigener Speichermanagment, sprich sie sollen bei der Zuweisung den Inhalt herauskopieren, und damit eigentlich nicht ursache des Problems sein ...



    aber vielleicht ergibt sich auf einem anderen Rechner ein anderes Verhalten...
    Andreas

  • @Hulk:


    Die Patches haben bei mir nichts verändert. Gleich der erste Test gab wieder den bekannten segfault.


    Wolfgang

    MSI C847MS-E33, Cine S2 6.0, Zotac GT630 (GK208), dual boot
    Work: yaVDR 0.7 ansible Ubuntu 22.04. Backup: yaVDR 0.5 Ubuntu 12.06


  • Zitat

    Original von wofritz


    Die Patches haben bei mir nichts verändert. Gleich der erste Test gab wieder den bekannten segfault.


    Versuche es mal mit dem letztem Patch für IndexToHMSF ...


    Der Sammelpatch enthalt auch die bisherigen Modifikationen, die alten Versionen mit patch -R vorher entfernen.


    Andreas

  • @Hulk:


    Ich hatte den letzten Patch mit drin. Aber ich werde nochmal den kompletten Patch neu einspielen, damit wir unter gleichen Bedingeungen testen. Leider ist das bei mir mit Handarbeit verbunden, da ich einige eigene Änderungen gemacht habe (die aber nichts mit dem Problem zu tun haben sollten).


    Wolfgang

    MSI C847MS-E33, Cine S2 6.0, Zotac GT630 (GK208), dual boot
    Work: yaVDR 0.7 ansible Ubuntu 22.04. Backup: yaVDR 0.5 Ubuntu 12.06


  • Hi,


    das war nur eine Vermutung das der Downloadzähler noch auf Nullstand. ?(


    Ich muss erstmal passen, ich kann keine offensichtlichen Stellen entdecken,
    die in das Problem hereinspielen, vielleicht gibt es diese Probleme nur in Verbindung mit anderen Plugins.
    Was den bei einen Minimal-VDR, nur mit den zwei Plugins.


    vdr -Pmp3 -Pglcd ...


    Andreas

  • Bei mir läuft für die Tests meine Minimal-Konfiguration mp3, graphlcd, remote (das muss sein, da mein VDR keine Tastatur hat).


    Ich drucke mir den graphlcd-Code gerade mal aus. Mal sehen, ob ich kapieren kann, wie das Teil eigentlich funktioniert.


    Bis denne,


    Wolfgang

    MSI C847MS-E33, Cine S2 6.0, Zotac GT630 (GK208), dual boot
    Work: yaVDR 0.7 ansible Ubuntu 22.04. Backup: yaVDR 0.5 Ubuntu 12.06


  • Bie mir crashed die Kiste auch. Ich bekomme mit dem gdb allerdings keinen backtrace.
    Ausgabe:
    #0 0x40580f61 in ?? ()
    #1 0x31000074 in ?? ()
    #2 0x402b6a52 in ?? ()
    #3 0x40580f60 in ?? ()
    #4 0x083e7d2c in ?? ()
    #5 0x083e7d34 in ?? ()


    Was muß ich machen, damit ich die Symbols bekomme um den Fehler im code zu finden?
    Ich habe alles mit -g compiliert?

    VDR: Gentoo 2.6.27 VDR 1.6.0-1 Plugins: VOMP, music, mplayer, dvd, epgsearch, extrecord, femon, arghdirector, premiereepg, mailbox, mediad, osdpip, skinenigmang, image, burn
    VOMP: 0.3.0 mit shutdown patch

  • Zitat

    Original von pompase
    Was muß ich machen, damit ich die Symbols bekomme um den Fehler im code zu finden?
    Ich habe alles mit -g compiliert?


    Folgendes im VDR/Makefile (VDR/Make.config) sollte helfen


    CXXFLAGS += -g -ggdb -O0
    LDFLAGS += -g -ggdb -O0


    Vollständiges Rebuild nicht vergessen.
    (make plugins-clean ...)


    Andreas

  • Hi,


    ich habe den VDR mit gdb mal ein bisschen durchgesteppt. Schon putzig, wenn bei jedem Step mal kurz der MP3-Player-Thread drankommt und ein Soundfragment zu hören ist...


    Jedenfalls habe ich das Gefühl, dass der Crash daher kommt, dass beim Drücken der Exit-Taste der MP3-Player beendet wird, und graphlcd es nicht rechtzeitig mitbekommt. Dann crasht der Aufruf von GetIndex(). Während der Wiedergabe erhält man folgenden Backtrace, wenn man an der richtigen Stelle anhält:

    Code
    #0  cMP3Player::GetIndex(int&, int&, bool) (this=0x8ad5448, Current=@0x88b9980, Total=@0x40403468) at player-mp3.c:1932
    #1  0x4037982f in cGraphLCDState::GetReplayState() (this=0x88b9908) at player.h:72
    #2  0x40364d7a in cGraphLCDDisplay::Action() (this=0x4037fbc0) at display.c:372
    #3  0x080dbed0 in cThread::StartThread(cThread*) (Thread=0x4037fbc0) at thread.c:227
    #4  0x400a20f0 in pthread_start_thread () from /lib/libpthread.so.0
    #5  0x402bcc77 in clone () from /lib/libc.so.6


    Das sieht dem Backtrace beim Crash doch ziemlich ähnlich, nur dass GetIndex noch gültig ist. Vielleicht kann ja jemand mit dieser Info etwas anfangen.


    Wolfgang

    MSI C847MS-E33, Cine S2 6.0, Zotac GT630 (GK208), dual boot
    Work: yaVDR 0.7 ansible Ubuntu 22.04. Backup: yaVDR 0.5 Ubuntu 12.06


  • Ich habe eine interessante Entdeckung gemacht (Naja kommt darauf an, ob ein aderer die Entdeckung schon gemacht hat). Ich habe mal die Programmbilder, die im Graphlcd angezeigt werden entfernt. Daraufhin wird dann zwar kein Bildchen mehr angezeigt, aber die Kiste stürzt nicht mehr ab. Ich bin leider noch nicht wirklich zum Debuggen gekommen, aber immerhin könnte das zunächst mal ein Workarround um das Problem sein.

    VDR: Gentoo 2.6.27 VDR 1.6.0-1 Plugins: VOMP, music, mplayer, dvd, epgsearch, extrecord, femon, arghdirector, premiereepg, mailbox, mediad, osdpip, skinenigmang, image, burn
    VOMP: 0.3.0 mit shutdown patch

  • Moin,


    anscheinend ist es tatsächlich so, dass graphlcd Methoden in mp3-Objekten aufruft, obwohl die Objekte bereits zerstört sind. Das liegt daran, dass das MP3-Plugin erst dann signalisiert, dass das Abspielen beendet ist, wenn die dazugehörenden Objekte schon zerstört sind. Abhilfe könnte folgender Patch im mp3-plugin bringen:


    Die Zeilennummern können etwas variieren, da ich z. Z. noch einige Debugausgaben drin habe.


    Solche Probleme können prinzipiell auch bei anderen Playern auftreten. Das müsste untersucht werden.


    Wolfgang

    MSI C847MS-E33, Cine S2 6.0, Zotac GT630 (GK208), dual boot
    Work: yaVDR 0.7 ansible Ubuntu 22.04. Backup: yaVDR 0.5 Ubuntu 12.06


  • Hallo,


    Zitat

    Original von wofritz
    anscheinend ist es tatsächlich so, dass graphlcd Methoden in mp3-Objekten aufruft, obwohl die Objekte bereits zerstört sind. Das liegt daran, dass das MP3-Plugin erst dann signalisiert, dass das Abspielen beendet ist, wenn die dazugehörenden Objekte schon zerstört sind. Abhilfe könnte folgender Patch im mp3-plugin bringen:


    Klingt Logisch, :]
    am besten den Patch auch an den MP3 Maintainer weiterleiten, sofern es ehe noch nicht geschehen ist.
    Andreas

  • Zitat

    Original von Hulk
    Am besten den Patch auch an den MP3 Maintainer weiterleiten, sofern es ehe noch nicht geschehen ist.
    Andreas


    Patch ist an die VDR ML gegangen.


    Jetzt bleibt noch der seltene Crash, wenn man das Abspielen einer VDR-Aufzeichnung beendet. Bis jetzt ist es mir noch nicht wieder gelungen, diesen Crash zu reproduzieren.


    Wolfgang

    MSI C847MS-E33, Cine S2 6.0, Zotac GT630 (GK208), dual boot
    Work: yaVDR 0.7 ansible Ubuntu 22.04. Backup: yaVDR 0.5 Ubuntu 12.06


Jetzt mitmachen!

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