Wieder 'Invalid lock sequence'

  • Sehe ich das richtig, dass VDR einen Lock in 'GetChannelsRead()' und dann das Skin in 'SetRecording()'?

    In SetRecording() habe ich das gefunden:

    Warum klappt das nicht? Kann man bestehende Locks nicht abfragen und dann warten bit der Lock frei ist?

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Warum klappt das nicht? Kann man bestehende Locks nicht abfragen und dann warten bit der Lock frei ist?

    Im Prinzip könnte man warten, bis der Lock beendet ist, das klappt aber in diesem Fall nicht, weil der LOCK nicht in dieser Funktion beendet wird, sondern im Core-VDR.

    Grundsätzlich sollte man Locks in den vom VDR bereitgestellten Set*() Funktionen vermeiden. Wenn Du einen Lock brauchst, kannst Du den nur über die Flush() Funktion gefahrlos realisieren. In Flush() gibt es keine Core-VDR Locks.

    Grüße

    kamel5

    VDR 2.7.3: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 40 Kernel 6.12 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Hm... Habe ca. 20 Lock_* gefunden, die fast alle in des Set*-Funktionen liegen

    Mir ist nicht klar, wie ich die Locks in den Flush() bekommen soll. Vor allem wenn da spezielle in der Funktion definierte Werte verwendet werden so wie im zweiten Codeblock oben...

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Mir ist nicht klar, wie ich die Locks in den Flush() bekommen soll.

    Klar, das ist manchmal nicht einfach...

    Im Endeffekt hilft da nur, die ganzen "invalid lock sequence" nacheinander abzuarbeiten.

    Es heißt ja auch nicht, das es nie funktioniert mit den Locks. Wenn die richtige Reihenfolge vorliegt, dann kann es durchaus funktionieren. LOCK_RECORDINGS_READ kann man z.B. in SetTitle() benutzen.

    In Deinem konkreten Fall könntest Du alles, was jetzt in SetTitle() stattfindet, in eine separate Funktion auslagern, die dann in Flush() aufgerufen wird. In SetTitle() speicherst Du nur den Title in einer außerhalb gültigen Variable, die Du dann auch in der neuen Funktion zum Zusammensetzen benutzt.

    Grüße

    kamel5

    VDR 2.7.3: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 40 Kernel 6.12 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Hab jetzt mal die Timer aus SetItem() nach Flush() verschoben. Das ist leider suboptimal, weil beim Aufruf des Menüs 'Timer' erst (0/0) angezeigt wird...

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Habe den Aufruf jetzt zusätzlich in cFlatDisplayMenu::cFlatDisplayMenu()

    Das müsste gehen

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Das ist leider suboptimal, weil beim Aufruf des Menüs 'Timer' erst (0/0) angezeigt wird...

    Das ist klar. Ich habe ja auch geschrieben: "alles". Du darfst dann in SetTitle() gar nichts ausgeben, in SetTitle() soll nur der "Title" zwischengespeichert werden, alles Andere muss dann über Flush() gemacht werden.

    kamel5

    VDR 2.7.3: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 40 Kernel 6.12 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Habe den Aufruf jetzt zusätzlich in cFlatDisplayMenu::cFlatDisplayMenu()

    Ist halt nicht so optimal. Dann hast Du ja die Locks mindestens 2mal.

    Nur über Flush() geht das in jedem Fall auch...

    Grüße

    kamel5

    VDR 2.7.3: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 40 Kernel 6.12 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Du darfst dann in SetTitle() gar nichts ausgeben, in SetTitle() soll nur der "Title" zwischengespeichert werden, alles Andere muss dann über Flush() gemacht werden.

    Das gefällt mir gar nicht, da dann im Menü erst nach dem ersten Flush() etwas angezeigt wird. Abgesehen davon haben die Locks in SetTitle() keine Probleme gemacht. Nur der Lock in SetRecording() wird jetzt hin und wieder im Log gemeldet

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Das gefällt mir gar nicht, da dann im Menü erst nach dem ersten Flush() etwas angezeigt wird.

    Das war ja auch nur ein Beispiel bezogen auf Deinen oben geposteten Code. Du kannst natürlich auch jede beliebige andere Lösung realisieren, die zu dem gewünschten Ergebnis führt.

    Abgesehen davon haben die Locks in SetTitle() keine Probleme gemacht.

    Dann musst Du da auch nichts machen...

    Nur der Lock in SetRecording() wird jetzt hin und wieder im Log gemeldet

    Da gilt das Gleiche, wie oben schon geschrieben. Dann musst Du eine andere Stelle für den Lock finden.

    Grüße

    kamel5

    VDR 2.7.3: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 40 Kernel 6.12 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Das ist Visual Studio Code von MiniWeich.

    Ist kostenlos und auch für Linux zu haben

    https://code.visualstudio.com/download

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Das ist Visual Studio Code von MiniWeich.

    Noch immer OT: Könntest du mal posten, wie man das für den VDR als Entwicklungsumgebung konfiguriert?

    Installiert hatte ich es schon vor einiger Zeit, bin dann aber bei den Makefiles hängen geblieben. Vielleicht kannst du auch noch darauf eingehen, was sonst noch so an Stolpersteinen auf uns lauert… ;)

    Hardware: Antec NSK2480, Asus P8B75-M LX, Intel Core i5-3570T, 4 GB RAM, NVIDIA GT610, TT-Premium S2-6400, 128 GB SSD, 14 TB HDD, Pioneer BDR-207EBK
    Software: Ubuntu 22.04 LTS mit Kernel 6.8 und VDR 2.7.3 (mit offiziellen und eigenen Patches)
    Plugins: devstatus, dvbhddevice, dvd, dvdswitch, epgsearch, extrecmenu, recsearch, femon, live, markad, mlist, osdteletext, remote, screenshot, skinenigmang, skinnopacity, streamdev, systeminfo, undelete, xineliboutput
    Addons: VDR Convert 0.1.0 (angepasst)

  • Das hab ich nicht konfiguriert. Ich synchronisiere das lokale git über den vdr in der virtualbox und baue dann ein.deb, das ich dann dort installieren kann zum testen...

    Ich bin sicher,das man das auch irgendwie lokal hin bekommen kann. Müsste halt alles was der VDR so braucht installiert werden...


    Für mich ist vs code eine gute Hilfe im Code den Überblick zu behalten und auch die git integration ist ganz nett

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Das gefällt mir gar nicht, da dann im Menü erst nach dem ersten Flush() etwas angezeigt wird.

    Es ist aber eigentlich so konzipiert, dass erst in Flush() die eigentliche Darstellung auf dem OSD passiert:

    virtual void Flush(void) {}
          ///< Actually draws the OSD display to the output device.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!