yavdr 0.5 testing Probleme mit yaepghd und RemoteTimers

  • Hallo,


    im Thread yaepgHD funktioniert nicht mehr nach update hatte ich meine Probleme mit dem Zusammenspiel von RemoteTimers und yaepghd geschildert. Schalte ich in yaepghd den Support für RemoteTimers ein, schmiert mir der VDR sofort nach Aufruf von yaepghd ab. Schalte ich RemoteTimers ab, wird das EPG vernünftig dargestellt.


    Meine vermutete Ursache hat sich nicht ganz bestätigt, im Gegenteil. Es ist mir nun völlig unklar, was passiert und wie ich es abstellen kann.


    Ich dachte, die Servicemethode

    Code
    1. bool cPluginRemotetimers::Service(const char *Id, void *Data)

    in remotetimers.c wird mit "RemoteTimers::RefreshTimers-v1.0" aufgerufen, die eingefügten Debug-Ausgaben ergaben jedoch einen Aufruf mit "ChildLockService-v0.1::ChildLockService". RemoteTimers kennt den ChildLockService nicht, gibt keine Fehlermeldung zurück und yaepghd versucht die nicht vorhandene Fehlermeldung auszugeben und VDR startet neu.


    Woher kommt der "ChildLockService-v0.1::ChildLockService"? Wie kann ich es abschalten? Ich finde weder in den VDR-Sourcen, noch in yaepghd, noch in RemoteTimers einen Hinweis.


    Zabrimus

  • Wird das evtl. vom Patch für das Pin-Plugin oder dem Pin-Plugin direkt definiert?
    Ich habe zumindest unter Arch Linux mit remotetimers und yaepghd heute keine Probleme gehabt...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    The post was edited 1 time, last by seahawk1986 ().

  • Ich dachte, die Servicemethode

    Code
    1. bool cPluginRemotetimers::Service(const char *Id, void *Data)

    in remotetimers.c wird mit "RemoteTimers::RefreshTimers-v1.0" aufgerufen, die eingefügten Debug-Ausgaben ergaben jedoch einen Aufruf mit "ChildLockService-v0.1::ChildLockService". RemoteTimers kennt den ChildLockService nicht,


    Wenn ein Plugin einen Serviveaufruf absetzt (z.B. id = "ChildLockService-v0.1") dann geht das durch die Service() ALLER Plugins. Plugins die sich nicht für "ChildLockService-v0.1" interessieren igorieren das einfach.


    Oder verstehe ich da an deinem Posting was falsch?


    cu

  • Keine_Ahnung


    Ahhh. Okay. Danke. Das wusste ich nicht, ich dachte immer, der Service-Aufruf würde schon differenzieren und nicht die Service-Methode aller Plugins aufrufen.
    Dann muss ich weiter forschen, vielleicht liege ich auch mit meiner zweiten Annahme falsch, obwohl es schon einen irgendwie gearteten Zusammenhang geben muss.


    Zumindest konnte ich das Problem in einer VM nachstellen und muß nicht mehr den "echten" Client belästigen.


    Zabrimus

  • Wenn ein Plugin einen Serviveaufruf absetzt (z.B. id = "ChildLockService-v0.1") dann geht das durch die Service() ALLER Plugins.


    Das hängt davon ab.


    cPluginManager::CallAllServices fragt alle Plugins und liefert true zurück, wenn mindestens eins geantwortet hat.
    cPluginManager::CallFirstService fragt solange die Plugins, bis eines antwortet und gibt das Plugin zurück.
    Außerdem kann ich mir mit cPluginManager::GetPlugin eine Plugin-Instanz holen und dort direkt cPlugin::Service aufrufen.


    Ich weiß jetzt nicht genau, was yaepghd da macht.


    Lars.

  • Das ist eigentlich ein schon lange bekanntes (aber nie gelöstes) Problem von yaepghd.


    Link


    Link


    Interressanterweise Funktioniert Yaepghd mit Remote-Timers bei Deaktivierung von extrecmenu wieder ohne Probleme (jedenfalls war das bisher so, habe aktuell noch nicht getestet.)
    Leider war das Problem damals nicht greifbar, da sich die eigentliche Ursache nicht wirklich ermitteln ließ


    pc-medusa

  • Das ist eigentlich ein schon lange bekanntes (aber nie gelöstes) Problem von yaepghd.


    Ob das wirklich ein Problem von yaepghd alleine ist? Es sind ja Deiner Erläuterung nach 3 Plugins beteiligt um das Problem auszulösen und ja, extrecmenu ist aktiv bei yaVDR 0.5 per Default ...

    HowTo: APT pinning

  • Mal die Quellen greepen, ich habs per Google hier gefunden http://svnweb.mageia.org/packages/cauldron/vdr/current/SOURCES/vdr-1.6.0-pin.patch?view=markup&pathrev=214746


    Wobei ichs nicht in meinen Quellen finden konnte, ist vermutlich irgendeine Privatspielerei (es gab da mal nen neuen PIN Patch wo jemand alles ganz anderst gemacht hatte) von jemanden? Aber wie sollte das in den yaVDR VDR kommen?



    Die Frage ist jetzt, welches Plugin hat dann ein Problem damit wenn dieser Serviceaufruf abgesetzt wird? Und wer setzt den ab (sollte sich per greep im Pluginlibverzeichnis rausfinden lassen)?


    cu

  • Moin!


    Evtl. kann ich heute abend mal in die yaVDR-Plugins gucken. Den PIN-Patch für den vdr hab ich direkt vom Original-Autor.


    Lars.

  • Ich glaube, ich habe es gefunden. Der ChildLockService stammt aus extrecmenu und ist nicht die eigentliche Ursache des Problems. Meine Ausgabe kommt nur durch den Aufruf von cPluginManager::CallFirstService zustande.


    Aber das extrecmenu mit yaepghd ist aber genau das Problem. In yaepghd wird das Plugin RemoteTimers mittels

    Code
    1. pRemoteTimers = cPluginManager::CallFirstService("RemoteTimers::RefreshTimers-v1.0", NULL);


    gesucht und auch etwas gefunden. Allerdings nicht RemoteTimers, sondern das extrecmenu! :wow


    Folgender Patch (für yaepghd) beseitigt zumindest bei mir das Problem (und auch eines für den DEBUG-Modus des yaepghd):


    Simpel, aber effektiv.


    Zabrimus

  • Moin!


    Einziger Haken ist, dass du "RemoteTimers::RefreshTimers-v1.0" nun nicht mehr aufrufst. Oder passiert das noch anschließend im else-Zweig?


    Lars.

  • Moin!


    extrecmenu benimmt sich falsch. Es darf nur dann true zurückgeben, wenn es einen Aufruf bekommt, den es kennt und behandelt.


    Das kann alles mögliche an Service-Aufrufen im vdr zwischen den Plugins durcheinander bringen...


    Lars.

  • Das ist nur die Initialisierungsmethode des Plugins um pRemoteTimers zu füllen.


    Bei Aufruf des EPG wird der Refresh tatsächlich nochmals real ausgeführt - und diesmal erfolgreich.


    Edit: Den Fix in extrecmenu zu machen, erscheint mir auch sinnvoller.


    Zabrimus

  • Ok, dann waren beide Plugins buggy.
    Das eine hat eine falsche Variante benutzt, um ein Plugin zu holen, und das andere behandelt Service-Aufrufe falsch...


    Aber danke für's finden!


    Lars.

  • Ich glaube, ich habe es gefunden. Der ChildLockService stammt aus extrecmenu


    Also der aktuelle GIT Stand enthält den String "ChildLockService" nicht.



    Ist also immer noch die Frage wer diesen Aufruf absetzt? Stört zwar nicht wenn alle Plugins korrekt arbeiten, wird aber vermutlich irgendwelche Fehlfunktionen in dem Plugin verursachen das den absetzt.


    cu

  • Hm, ich hab jetzt mal yaepghd, remotetimers und extrecmenu aus dem unstable-PPA untersucht, da ist kein ChildLockService drin.


    Was benutzt du für Quellen? Jedenfalls nicht yavdr, oder?


    Lars.

  • Also eigentlich sollte das Plugin aus yavdr-testing stammen:

    Code
    1. dpkg -l | grep -i extrecmenu
    2. ii vdr-plugin-extrecmenu 1.2.2.git20130323-4yavdr0~precise Plugin for vdr for an enhanced recordings menu


    Ach Mist. Ich bin da wohl mit den Sourcen durcheinander gekommen :wand Ich habe mir mal alle geladen um einen grep durchführen zu können.


    Der ChildLockService wird in vdr-plugin-menuorg-0.5.0 verwendet um die Abfrage nach Plugins und Menupunkten zu erlauben.


    Zabrimus