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:
2018-05-04T11:03:47.368781+02:00 vdr: [22487] skinelchi: OSDsize Channel 1920x1080 left=115/115 top=65/65 width=1688/1688 heigth=950/950
2018-05-04T11:03:47.378906+02:00 vdr: [22487] skinelchi: loading logo "/etc/vdr/plugins/skinelchi/logos/1080/ZDF HD.xpm"
2018-05-04T11:03:47.380652+02:00 vdr: [22487] --- begin invalid lock sequence report
2018-05-04T11:03:47.380793+02:00 vdr: [22487] 22490 - - - - - - - - - - U
2018-05-04T11:03:47.380902+02:00 vdr: [22487] 22490 - - W - - - - - - - L
2018-05-04T11:03:47.381005+02:00 vdr: [22487] 22490 - - U - - - - - - - U
2018-05-04T11:03:47.381103+02:00 vdr: [22487] 22490 - - W - - - - - - - L
2018-05-04T11:03:47.381201+02:00 vdr: [22487] 22490 - - U - - - - - - - U
2018-05-04T11:03:47.381303+02:00 vdr: [22487] 22490 - - W - - - - - - - L
2018-05-04T11:03:47.382716+02:00 vdr: [22487] 22490 - - U - - - - - - - U
2018-05-04T11:03:47.382858+02:00 vdr: [22487] 22490 - - W - - - - - - - L
2018-05-04T11:03:47.382971+02:00 vdr: [22487] 22490 - - U - - - - - - - U
2018-05-04T11:03:47.383073+02:00 vdr: [22487] 22490 - - W - - - - - - - L
2018-05-04T11:03:47.383170+02:00 vdr: [22487] 22490 - - U - - - - - - - U
2018-05-04T11:03:47.383268+02:00 vdr: [22487] 22490 - - W - - - - - - - L
2018-05-04T11:03:47.383364+02:00 vdr: [22487] 22490 - - U - - - - - - - U
2018-05-04T11:03:47.383461+02:00 vdr: [22487] 22490 - - W - - - - - - - L
2018-05-04T11:03:47.383564+02:00 vdr: [22487] 22490 - - U - - - - - - - U
2018-05-04T11:03:47.383665+02:00 vdr: [22487] 22490 - - W - - - - - - - L
2018-05-04T11:03:47.383763+02:00 vdr: [22487] 22490 - - U - - - - - - - U
2018-05-04T11:03:47.383860+02:00 vdr: [22487] 22490 - - W - - - - - - - L
2018-05-04T11:03:47.383957+02:00 vdr: [22487] 22487 - U U - - - - - - - U
2018-05-04T11:03:47.384055+02:00 vdr: [22487] 22487 R * - - - - - - - - L
2018-05-04T11:03:47.384153+02:00 vdr: [22487] 22487 invalid lock sequence: 1 Timers
2018-05-04T11:03:47.384254+02:00 vdr: [22487] full backtrace:
2018-05-04T11:03:47.565042+02:00 vdr: [22487] /usr/src/packages/BUILD/vdr-devel/vdr cStateLock::Lock(cStateKey&, bool, int) at thread.c:735
2018-05-04T11:03:47.565282+02:00 vdr: [22487] /usr/src/packages/BUILD/vdr-devel/vdr cTimers::GetTimersRead(cStateKey&, int) at timers.c:845
2018-05-04T11:03:47.565388+02:00 vdr: [22487] /usr/src/packages/BUILD/vdr-devel/PLUGINS/lib/libvdr-skinelchi.so.2.4.0 cSkinElchiDisplayChannel::Flush() at DisplayChannel.c:873
2018-05-04T11:03:47.565566+02:00 vdr: [22487] /usr/src/packages/BUILD/vdr-devel/vdr cDisplayChannel::cDisplayChannel(int, bool) at menu.c:4681
2018-05-04T11:03:47.565677+02:00 vdr: [22487] /usr/src/packages/BUILD/vdr-devel/vdr main at vdr.c:1073
2018-05-04T11:03:47.565786+02:00 vdr: [22487] /lib64/libc.so.6 __libc_start_main at ??:?
2018-05-04T11:03:47.565892+02:00 vdr: [22487] /usr/src/packages/BUILD/vdr-devel/vdr _start at start.S:121
2018-05-04T11:03:47.566000+02:00 vdr: [22487] --- end invalid lock sequence report
2018-05-04T11:03:47.566101+02:00 vdr: [22487] --- THERE WILL BE NO FURTHER REPORTS UNTIL VDR IS RESTARTED!
2018-05-04T11:03:47.566246+02:00 vdr[22487]: invalid lock sequence at Fr. 04.05. 11:03
Display More
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....