invalid lock sequence bei den meisten Skin-Plugins

  • Viele Skin-Plugins (die nicht beim VDR mitgeliefert werden ;)) fragen ja in DisplayChannel::SetEvents() ab, ob es Timer gibt um das REC-Symbol entsprechend beim Title des Present Event dazustellen. Da ab VDR 2.3.x ja die Funktion mit vorherigem LOCK_CHANNELS_READ aufruft, kann man kein Read-Lock mehr für die Timer in SetEvents() setzen (weil dann ein Deadlock drohen könnte) und VDR meldet eine invalid lock sequence im syslog.

    Wie von Klaus empfohlen habe ich die Timer-Abfrage in skinElchi testweise in DisplayChannel::Flush() ausgelagert, war aber verwundert, dass direkt beim Start wieder eine invliad lock sequence gemeldet wird:

    Wenn ich den VDR Quellcode richtig verstehe wird das Flush an beiden Stellen mit vorherigem LOCK_CHANNELS_READ aufgerufen.

    Im LCARS Skin wird im Flush nur der Present-Event benutzt, keine Timer, auch wenn das hier im Forum schon zu lesen war.


    Ich dachte man könnte Event->HasTimer() als Alternative benutzen (mit kleinen Einschränkungen bei der Funktionalität), aber da habe ich die Tage festgestellt, dass sich in VDR 2.4 das Verhalten von HasTImer() geändert hat: in VDR 2.2 wurde nur bei aktivem Timer true zurückgegeben, in VDR 2.4 wird bei aktiven und inaktiven Timern true zurück geliefert, so dass damit keine REC-Anzeige realisierbar ist.


    Sorry Klaus, dass mir das nicht früher aufgefallen ist, aber ich habe aus zeitlichen Gründen die VDR Entwicklung nicht aktiv verfolgt und wollte jetzt "nur" mein Skin-Plugin anpassen....


  • Dazu habe ich gestern auch schon eine Email erhalten. Saudumme Sache das ;-).

    Natürlich sollte Flush() ohne Lock aufgerufen werden. Ich mache dazu demnächst einen Fix.


    Klaus