[gelöst] segfault beim Löschen eines Timers => Timers.Del(t);

  • Hallo.


    Ich habe da ein Problem, wo ich nicht weiter komme.


    Es geht um vdrmanager (Android) und das Löschen eines aktiven Timers.



    Folgende Passage habe ich




    Das segfault passiert, nach

    Code
    isyslog("deleting timer %s", *t->ToDescr());


    Vermutlich in Del Aufruf.



    Code
    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
    Core was generated by `/usr/bin/vdr-dbg --lirc=/var/run/lirc/lircd -v /srv/vdr/video.00 -c /var/lib/vd'.
    Program terminated with signal 11, Segmentation fault.
    #0  0x000000000054ec9d in cListObject::Index (this=0x18c34d0) at tools.c:1927



    Die Stelle ab

    Code
    bool forceDelete = true;


    Habe ich von menu.c (vdr) übernommen.


    Die Stelle in menu.c sieht so aus





    Wenn bei einem aktiven Timer, was gerade aufzeichnet der Code durchlaufen wird, gibt es einen Segfault in


    tools.c, Zeile 1927





    Was ist da falsch? Kann jemand mir einen Tip geben?



    Gruß,
    Lado

    Einmal editiert, zuletzt von herrlado ()

  • Naja, an welcher Stelle genau ein segfault auftritt, kann man recht gut per gdb ermitteln.


    Nicht, dass ich mich auskenne, aber müsste das nicht heissen:


    Code
    Timers::Del(t);
    Timers::SetModified();


    oder


    Code
    cTimers::Del(t);
    cTimers::SetModified();

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Irgendwie tritt das in der List Implementierung von vdr auf. Beim Dereferenzieren von prev Element.


    Wenn ich über das Menu lösche klappt das. So nicht.


    Ich denke der Aufruf ist syntaktisch korrekt. Gruß,
    Lado

  • //Edited; Hier Stand Unsinn.

    Einmal editiert, zuletzt von herrlado ()

  • Ohne es jetzt 100% zuwissen. Meine Vermutung ist:


    Du hast ein Threadproblem. Der eine Thread löscht, der andere arbeitet die Liste ab.
    Dies kann natürlich nicht klappen.


    Dies kannst ja mit gdb einfach angucken "info threads" und "thread" zum umschalten.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Moin!


    Was du auch noch bedenken musst, ist, dass Timers.Del das Timer-Objekt löscht, d.h., sobald du den Fehler gefunden hast, wird das nachfolgende dsyslog einen Crash verursachen.


    Lars.

  • mini73


    Danke, mir ist peinlich, wie konnte ich übersehen.


    Vielen Dank für den Hinweis. Daran lag das!



    Gruß,
    Lado

  • Danke, mir ist peinlich, wie konnte ich übersehen.


    Keine Sorge, sowas passiert jedem immer wieder... :)


    Lars.

Jetzt mitmachen!

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