[ANNOUNCE] VDR Extensions Patch v.54

  • Mit deiner Auswahl kann ich den Fehler reproduzieren.
    Allerdings auch mit der 37.1 von zzam


    Ich habe dann diverse Variationen probiert und es liegt am neuen NOEPG.


    Menu:
    - Einstellung - OSD
    Back/Exit
    - Einstellung - OSD
    Back/Exit
    - Einstellung - OSD
    Back/Exit
    ...
    zwei- drei- vier- mal, irgendwann stürzt er ab.


    Mach ich dann das

    Diff
    --- vdr-1.5.12/config.c~	2007-11-19 18:45:40.000000000 +0100
    +++ vdr-1.5.12/config.c	2007-11-19 18:45:51.000000000 +0100
    @@ -442,7 +442,7 @@
     #ifdef USE_NOEPG
     cSetup::~cSetup()
     {
    -  free(noEPG);
    +//  free(noEPG);
     }
     #endif /* NOEPG */


    stürzt der VDR nicht mehr ab. Nebenwirkung habe ich bei einem kurzen Test nicht bemerkt.


    Gruß
    Marc

  • Habe gerade nochmal in mein 1.5.11 geschaut. Da der 39er Patch ja einige Features mehr als der 37.1 hat, habe ich die Make.config nicht kopiert, sondern auf Basis der Make.config.template neu erstellt. Dabei konnte ich wohl der Versuchung nicht widerstehen ein bissl mehr auszuwählen, hier die Optionen im zzam Patch:


    #CHANNELSCAN = 1
    CMDSUBMENU = 1
    #CUTTERLIMIT = 1
    #CUTTERQUEUE = 1
    CUTTIME = 1
    DDEPGENTRY = 1
    DOLBYINREC = 1
    #DVBPLAYER = 1
    #DVBSETUP = 1
    #DVDARCHIVE = 1
    #DVDCHAPJUMP = 1
    #DVLFRIENDLYFNAMES = 1
    #DVLRECSCRIPTADDON = 1
    #DVLVIDPREFER = 1
    #GRAPHTFT = 1
    #HARDLINKCUTTER = 1
    #IPTV = 1
    JUMPPLAY = 1
    LIEMIKUUTIO = 1
    #LNBSHARE = 1
    MAINMENUHOOKS = 1
    #MENUORG = 1
    NOEPG = 1
    #OSDMAXITEMS = 1
    #PINPLUGIN = 1
    PLUGINAPI = 1
    PLUGINMISSING = 1
    #ROTOR = 1
    SETTIME = 1
    #SETUP = 1
    #SOURCECAPS = 1
    SORTRECORDS = 1
    #SUBMENU = 1
    #SYNCEARLY = 1
    TIMERCMD = 1
    TIMERINFO = 1
    VALIDINPUT = 1
    WAREAGLEICON = 1
    #YAEPG = 1


    Und da stürzt der VDR an dieser Stelle nicht ab.


    Wenn die Kiste wieder frei ist, werde ich exakt diese Konfiguration mal testen.

  • Hier ist egal ob 37.1, 38 oder 39, der VDR stürzt mit aktiviertem NOEPG ab.


    Probiere das in den Einstellungen mit OSD - Back - OSD ... einfach ein paar mal, dann klappts ;)

  • Komisch, so ganz verstehe ich es nicht. Mein 1.5.11er + 37.1 ist definitiv mit NO_EPG kompiliert und da hatte ich den Absturz nie, oder wohl offensichtlich nie oft navigiert ???


    Die gleichen Einstellungen beim 1.5.12er + 39 bringen (erwartungsgemäß) nix. Ich bastel mir jetzt einen VDR mit Deinem Fix. Sieht so aber auf den ersten Blick nach nem Speicherleck aus.


  • Antwote mir mal selber, hatte MENUORG auskommentiert! Naja...


    Mfg SVen

  • Hi,


    ich kämpfe auch mit dem noEPG Problem und habe es mal näher angesehen. Die Ursache liegt in der dynamischen Verwaltung von noEPG. Auch in "Aufhebung 999-Zeichen-limit" ist es m.E. nicht gelöst.


    Hier

    Code
    cMenuSetupBase::cMenuSetupBase(void)
    {
      data = Setup;
    }

    nämlich genau beim jedem Aufruf des Setup Menüs wird der 'default' Copy-Konstruktor der cSetup Klasse verwendet, dabei wird eine Kopie der Klasse angelegt. Auch der char* noEPG wird kopiert, nicht jedoch der Speicher auf den er zeigt. Somit hat die Kopie nun eine Referenz auf den Speicher der anderen Instanz. Dieser wird dann im Destruktor frei gegeben und der Zeiger der anderen Instanz zeigt in die Pampa, was dann früher oder später einen Crash zur Folge hat. Daher hilft wie von zulu vorgeschlagen das auskommentieren des free(noEPG) im Destruktor, das gibt zwar ein memleak aber der Speicher bleibt erst mal heile.


    Aus meiner Sicht gibt es folgende Lösungen:


    Lösung 1: Einen eigenen Copy Konstruktor schreiben welcher den noEPG String kopiert. Dieser Konstruktor müsste dann jedoch alle Member der Klasse umkopieren und jeder neue Member welcher in einer neuen VDR Version hinzukommt müsste wiederum berücksichtigt werden.


    Lösung 2: Die Variable noEpg außerhalb der Klasse verwalten (als static deklarieren sollte ggf. auch gehen)


    Lösung 3: Die einfachste, noEPG wieder als 'char array' anlegen


    Lösung 4: So lassen, den Default Copy Konstruktor aufrufen, und anschließend (ist glaube ich nur die eine Stelle oben) eine Methode von cSetup (ala detachAndInitNoEpg(const char* noEPG)) aufrufen.


    Ich tendiere zu 4 ist etwas dirty aber schnell eingebaut uns noEPG beleibt damit dynamisch.


    /Edit


    Ich habe es mir nochmal angesehen, von dem "Aufhebung 999-Zeichen-limit" gibt es wie ich nun erkannt habe eine zweite Version, in dieser fehlt der free(), daher auch kein Crash, ist aber immer noch gefährlich und ein potenzieller Crash Kandidat da sich die Instanzen der Klasse den Speicherbereich teilen.


    Auch hier kann es m.E. krachen:

    Code
    noEPG=new char[0];
    strcpy(noEPG, "");

    es werden null Byte Speicher reserviert und ein Byte (die terminierende Null) reinkopiert.


    könnte man gegen:

    Code
    noEpg=strdup("");

    ersetzen.


    horchi

    2 Mal editiert, zuletzt von horchi ()

  • Hi,


    da ich auch den Fehler aus dieser Meldung [Announce] epgsearch-0.9.23 reproduzieren kann, habe ich mich nochmal auf die Suche gemacht.


    Raus gekommen ist ein zweiter Fehler im LIEMIKUUTIO.


    Ich habe die osdbase.c angehängt. Da drin sind die betroffenen Stellen mit _USE_LIEMIKUUTIO markiert.


    Wenn ich diese Stellen im Extensions Patch auskommentiere tritt der Fehler mit dem conflictcheckonly nicht mehr auf.


    Gruß
    Marc

  • Hi Zulu!


    Ich hab noch Vorschläge den extensions-patch besser zu machen:
    1. diff -ruNp verwenden. Dann sieht man in welcher Funktion die Änderungen sind.
    2. Eventuell die ifdef-Teile aus Make.config.template in eine andere Datei verschieben und mit include einbinden.


    Hast du eigentlich Kontakt zum liemekuutio Autor aufgenommen?


    Zzam

  • Hallo Zzam,


    "diff -ruNp" können wir gerne machen.
    Das mit der Make.config finde ich jetzt erstmal nicht so toll, weil ich dann mein Installscript umschreiben muss ;)


    Kontakt habe ich noch nicht aufgenommen, habe aber auch keine Adresse.


    Gruß
    Marc

  • Hi Marc,


    Deine x-vdr.sh ist ja ein wahnsinn .... Bravo.... :)
    Auf die Neue sidux 2007-04 lite von heute Morgen. Er hat mir xine und den VDR zusammen gebaut ohne eingriffe.


    Die Nova-S hat er schon ich würde dann gern nochmals das ganze am Schirm.


    Da weiß ich nicht mehr wie ich es vor ein Paar Monate auf der Alten Sidux gemacht hatte ? ;(


    Danke nochmals.


    Gruss Patrice


    Diskless Client: SMT 7020S und S100 128SDRAM 32DOM zendeb 0.4.0 beta1 mit MMS 1.0.8.5
    Hardware: Pundit-R Celeron 2.4 256DDRAM Samsung SATA 400 Gbyte Festplatte Hauppage Nexus-S Rev 2.3 Nova-S Plus DVD-RAM LG
    Software: EasyVDR 0.6.0 (vdr-1.6.0-2-ext64), LinVDR 0.7 1.4.7 Mahlzeit, SUSE-Server 10.2 1.6.0-1
    Test System: Shuttel AMD Athlon 2.6 Ghz 256DDRAM Samsung 250Gbyte Hauppage Nexus-S Rev 2.3 DVD-RAM LG ......

    :fans :welle

  • Super, Patch funktioniert super....


    aber irgendwie bekomm ich das noepgmenu nun nicht mehr an's laufen:


    VDR1.7.12 + ExtPatch on openSuSE 11.1 2.6.27.45-0.1-default (x86_64) gcc 4.3.2 r141291
    1xNexus (fw:f12623) ** 3xTeVii S650 ** Alphacrypt/SKY ** DVB-Treiber 7.6.09cvs ** 7" GraphTFT ** VOMP on MediaMVP ** zendeb 0.4.0.b1 on S100 ** 4ch Atmolight
    Xine-lib-1.2 20100412(vdpau) +DFextPatch ** XINE-UI ** Nvidia GT240 (260.19.36) ** Samsung LE46C650 ** istreamdev-git_20110216 to IPhone

  • Hi,


    im Extension Patch ist die aktuellste Version vom NoEpg Patch (von hier
    noEPG: Aufhebung 999-Zeichen-limit)
    enthalten, in diesen wurde noEPG in noEPGList umbenannt.


    Torsten/WarEagle hat da eine Erweiterung mit White und Blacklist eingebaut. Ob es schon eine Anpassung des Plugins dazu gibt weis ich nicht.


    /Edit
    hab mal unter obigem Link nachgesehen, und ja es gibt dort auch einen Patch fürs Plugin.


    Grüße
    horchi

    Einmal editiert, zuletzt von horchi ()

  • Mein VDR beendet sich nach ein paar Sekunden kommentarlos. Ich hab die
    1.4.7 und die 1.5.12 probier, auch mal ohne Plugins. Ein ungepatchter VDR
    läuft durch. Ich hab noch nicht herausgefunden, an welchem es liegt.
    Das Problem trat auch mit der Version 39 auf.

  • Zitat

    LIEMIKUUTIO: VDR crashes while selecting the OSD-Setup for conflictcheckonly, epgsearchonly or quickepgsearch


    I haven't noticed these kind of crashes on my setup and just verified the functionality with vdr-1.5.2 + liemikuutio-1.16 + conflictcheckonly-0.9.24.beta13.

  • Hi Mase,


    Zitat

    Mein VDR beendet sich nach ein paar Sekunden kommentarlos


    ich habe es mit deiner config probiert und der VDR läuft.
    Wie startest du den VDR denn?


    Gruß
    Marc

Jetzt mitmachen!

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