Passiert das auch mit z.B. xineliboutput oder dem neuen vaapivideo?
Nur um sicher zu gehen, dass es wirklich an softhddevice liegt.
Du hattest ja schon mal einen falschen Verdacht.
[softhddevice] VDR hängt nach jeder OSD-Anzeige
-
-
Hihi, ich schlage mich schon seit gestern mit Gemini rum

Leider trifft nix von dem zu, was er da oben gesagt hat - und auch die gefühlt tausend anderen Tips haben keine Besserung ergeben bisher - auch wenn ich spannende neue Kernelparameter kennenlernen durfte: i915.enable_guc=2 i915.enable_psr=0 i915.enable_dc=0 intel_idle.max_cstat=1 pcie_aspm=off
Auch Umstellen auf Intel statt modesetting Driver für X11 hat nix gebracht, ebensowenig diverse Optionen in der xorg.conf für Intel oder modesetting.
Gestern schien es mit dem Intel Driver und den o.a. Kernelsettings mal besser geworden zu sein, aber das war auch nur temporär.
Auch der llvmpipe Entry will nicht verschwinden.Dazu behaupt Gemini, dass die intel_gpu_top Anzeige viel zu hohe Werte zeigen würde für das, was da ablaufen würde - aber das kann ich nun garnicht beurteilen.
Danke dir in jedem Fall trotzdem für die Hinweise!
Hi nobanzai,
das hört sich nach meiner Leidensgeschichte an (also das mit dem Renderer llvmpipe; nicht unbedingt die Auswirkungen, die sahen bei mir anders aus)... es waren ungünstige Kombinationen der Versionen von Treibern und Bibliotheken:
[softhddevice] kein video output seit dist-upgrade - error: video/egl: eglCreateImageKHR failed
Mittlerweile habe ich auf kUbuntu 2510 aktualisiert, was ohne Eingriffe sofort korrekt funktionierte.Viele Grüße,
Chriss -
VDR-Aufruf (alles aktuellste Versionen auf den jeweiligen git Repos):
Code /usr/sbin/vdr -u vdr -c /etc/vdr -E /home/vdr/epg.data -L /usr/lib/vdr -r /etc/vdr/scripts/vdr.exec -t /dev/tty8 -v /var/spool/video/video0 -g /home/vdr/tmp/grabdir -w 0 --lirc=/run/lirc/lircd --dirnames=,,1 --shutdown=/etc/vdr/scripts/vdrshutdown -D0 -Pcontrol --port=4444 -Psofthddevice -v va-api-egl -d :0.0 -g 1920x1080+0+0 -a pipewire -p pipewire -l 3 -N -Pchannellists -Pdvbhddevice -Pepgsync -Psvdrpservice -Piptv -Pwebsocket --logodir=/etc/vdr/logos --port=44444 -Posdteletext --directory=/home/vdr/teletext -Pskinnopacity --logopath=/etc/vdr/logos --epgimages=/var/spool/video/epgimages --iconpath=/etc/vdr/plugins/skinnopacity/nopacity_iconpack/nopacity/ -Ptvscraper --dir /var/spool/video/tvscraper --readOnlyClientIch würde mal testweise nicht unbedingt nötige Komponenten deaktivieren.
Und kann man softhddevice und dvbhddevice gleichzeitig benutzen?
-
Ich würde mal testweise nicht unbedingt nötige Komponenten deaktivieren.
Und kann man softhddevice und dvbhddevice gleichzeitig benutzen?
Kann man.
Aber ich habe auch schon Tests mit nur softhdddevice ohne weitere Plugins gemacht - ohne Verbesserung.
-
Passiert das auch mit z.B. xineliboutput oder dem neuen vaapivideo?
Nur um sicher zu gehen, dass es wirklich an softhddevice liegt.
Du hattest ja schon mal einen falschen Verdacht.xineliboutput habe ich nicht mehr, aber mit vaapivideo passiert es nicht.
-
Achso ja, und mit -v cpu-egl klappt auch mit softhddevice alles - es könnte also am Zusammenspiel von softhddevice und vaapi liegen.
-
Da es länger hängt, könnte man es evtl. schaffen in der Zeit einen Coredump zu schreiben.
Wenn man raus bekommt, wo es genau hängt, käme man vielleicht weiter.
-
Da es länger hängt, könnte man es evtl. schaffen in der Zeit einen Coredump zu schreiben.
Wenn man raus bekommt, wo es genau hängt, käme man vielleicht weiter.
Du meinst den laufenden VDR zum dumpen bringen?
-
Das geht bei laufendem Prozess irgendwie mit GDB, wenn ich das noch recht erinnere.
Alternativ kann man dem Programm einfach SIGABORT senden, das sollte das Programm hart beenden (KILL!) und einen Coredump schreiben.
Probiert habe ich das aber am VDR noch nicht.
Aber das bitte nur auf einem Testsystem machen, da können gerade geöffnete Dateien kaputt gehen! -
Du kannst deinen VDR starten und parallel in einem anderen Terminal gdb starten.
Sobald VDR hängt, kann man sich in der gdb Konsole mit "attach _pid_von_vdr_" in den Prozess hängen, woraufhin der angehalten wird.
Mit "info threads" siehst du alle offenen threads und z.B. mit "thread 20" "where" kannst du schauen, wo der Thread im Code gerade ist. Das könnte schon weiterhelfen.
-
Das sieht dann so aus, wenn er gerade im Menü hängt - welchen der Threads müsste man denn da genauer ansehen? Die beiden von softhddevice, nehme ich an?
Code
Display More(gdb) info threads Id Target Id Frame * 1 Thread 0x7f6c6da81780 (LWP 28733) "vdr" 0x00007f6c6d4989d0 in __lll_lock_wait () from /lib64/libc.so.6 2 Thread 0x7f6c32e146c0 (LWP 28947) "control::mTCP" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 3 Thread 0x7f6c16ff56c0 (LWP 28919) "oglThread" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 4 Thread 0x7f6c4e9946c0 (LWP 28862) "data-loop.0" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 5 Thread 0x7f6c4f9966c0 (LWP 28861) "alsa-pipewire" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 6 Thread 0x7f6c177f66c0 (LWP 28860) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 7 Thread 0x7f6c17ff76c0 (LWP 28859) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 8 Thread 0x7f6c187f86c0 (LWP 28858) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 9 Thread 0x7f6c18ff96c0 (LWP 28857) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 10 Thread 0x7f6c197fa6c0 (LWP 28856) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 11 Thread 0x7f6c19ffb6c0 (LWP 28855) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 12 Thread 0x7f6c1a7fc6c0 (LWP 28854) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 13 Thread 0x7f6c1affd6c0 (LWP 28853) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 14 Thread 0x7f6c1b7fe6c0 (LWP 28852) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 15 Thread 0x7f6c1bfff6c0 (LWP 28851) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 16 Thread 0x7f6c20ffa6c0 (LWP 28850) "vdr" 0x00007f6c6611ded0 in ?? () from /lib64/libgomp.so.1 17 Thread 0x7f6c217fb6c0 (LWP 28839) "SVDRP server ha" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 18 Thread 0x7f6c21ffc6c0 (LWP 28838) "osdteletext-rec" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 19 Thread 0x7f6c227fd6c0 (LWP 28837) "device 1 TS buf" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 20 Thread 0x7f6c23fff6c0 (LWP 28836) "device 1 receiv" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 21 Thread 0x7f6c30e106c0 (LWP 28831) "LIRC remote con" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 22 Thread 0x7f6c316116c0 (LWP 28829) "vdr:gdrv0" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 23 Thread 0x7f6c31e126c0 (LWP 28828) "vdr:traceq0" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 24 Thread 0x7f6c326136c0 (LWP 28827) "websocket-worke" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 25 Thread 0x7f6c336156c0 (LWP 28825) "softhddev video" 0x00007f6c6d497f9a in __internal_syscall_cancel () from /lib64/libc.so.6 26 Thread 0x7f6c37dff6c0 (LWP 28822) "vdr:gdrv0" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 27 Thread 0x7f6c449fe6c0 (LWP 28821) "vdr:traceq0" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 28 Thread 0x7f6c451ff6c0 (LWP 28820) "vdr:gdrv0" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 29 Thread 0x7f6c4cbfd6c0 (LWP 28819) "vdr:traceq0" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 30 Thread 0x7f6c4d3fe6c0 (LWP 28818) "vdr:sh0" 0x00007f6c6d4a4772 in __syscall_cancel_arch () --Type <RET> for more, q to quit, c to continue without paging-- from /lib64/libc.so.6 31 Thread 0x7f6c4dbff6c0 (LWP 28817) "vdr:disk$0" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 32 Thread 0x7f6c5eadc6c0 (LWP 28812) "softhddev audio" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 33 Thread 0x7f6c4f1956c0 (LWP 28758) "alsa-pipewire" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 34 Thread 0x7f6c56ffd6c0 (LWP 28756) "control::mTCP" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 35 Thread 0x7f6c577fe6c0 (LWP 28755) "device 3 sectio" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 36 Thread 0x7f6c57fff6c0 (LWP 28754) "IPTV section ha" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 37 Thread 0x7f6c5d8d86c0 (LWP 28753) "frontend 0/0 tu" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 38 Thread 0x7f6c5e2db6c0 (LWP 28750) "device 1 sectio" 0x00007f6c6d4a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 -
Schwer zu sagen. Am besten, du kannst die Plugins eingrenzen. Dann alle anderen.
Zueret "thread 1", dann "where", dann den nächsten Thread "thread 2".
Vorausgesetzt, du hast die debug Symbole drin, musst du im Quellcode schauen, wo er gerade ist und drüber nachdenken, ob das Sinn macht und ob das damit zu tun haben kann.
So würde ich es machen.
-
Schwer zu sagen. Am besten, du kannst die Plugins eingrenzen. Dann alle anderen.
Zueret "thread 1", dann "where", dann den nächsten Thread "thread 2".
Vorausgesetzt, du hast die debug Symbole drin, musst du im Quellcode schauen, wo er gerade ist und drüber nachdenken, ob das Sinn macht und ob das damit zu tun haben kann.
So würde ich es machen.
Voraussetzung wäre, man würde verstehen, was der Quellcode treibt - da habe ich bei mir doch ernste Bedenken.
-
Hm, aber ohne in den Quellcode zu schauen wird man das Problem nicht finden bzw. lösen können...
-
Hm, aber ohne in den Quellcode zu schauen wird man das Problem nicht finden bzw. lösen können...
Das glaube ich schon auch, nur werd *ich* das auch mit in den Quellcode kucken nicht finden können.
-
Die beiden von softhddevice, nehme ich an?
Den oglThread unbedingt auch.
Und nur mit den absolut nötigen Plugins wäre das auch etwas übersichtlicher.
-
Da Dein VDR ja gar nicht mehr reagiert müsste das der Haupththread sein (also Nr 1) und der hängt lt. Deinem Log in __lll_lock_wait, das passt also zusammen. Deshalb schau mal, wo er hängt. 'where' kannte ich noch nicht, in nutze immer 'list'. 'bt' bzw 'bt full' von Thread 1 wäre auch interessant um zu sehen wir er an diese Stelle kommt.
-
Falls es daran liegt, daß ein Lock zu lange gehalten wird, hilft:
Thread[patch] vdr-2.7.9-check-lock-time-1.patch
Ich habe den von kls bereitgestellten Patch weiterentwickelt.- Der Patch ist jetzt thread-save
- Der Patch berücksichtigt jetzt, dass mehrere Threads einen Read-lock halten können
- Der Patch stellt die Methode cRwLock::debug(const char *lockName) bereit. Diese kann z.B. aufgerufen werden wenn VDR sich mit exit() nicht beendet. Damit können wir herauszufinden welche Threads noch welche Locks halten. Vielleicht finden wir dann ja den "Schuldigen", der VDR blockiert
MarkusEFebruary 18, 2026 at 3:13 PM 1. Den Patch anwenden
2. MAX_LOCK_TIME ändern, z.B. auf #define MAX_LOCK_TIME 1 (1 wie 1 Sekunde). Dann werden alle Treads gemeldet, die einen Lock länger als 1 s halten
3. VDR neu übersetzen.
4. Plugins neu übersetzen
5. VDR restarten
6. Den Fehler möglichst schnell reproduzieren
7. Im Log nach "ERROR" suchen, zu dem Timestamp, an dem der Fehler auftrat.
Anmerkungen:
- Das ist jetzt nur für die Fehlersuche. Für Produktivbetrieb ist #define MAX_LOCK_TIME 1 zu kurz. Da empfehle ich #define MAX_LOCK_TIME 60. Wenn nur der Wert von MAX_LOCK_TIME geändert wird, dann genügt es VDR neu zu übersetzen. Die Plugins brauchen dann nicht neu übersetzt werden.
- Es kann da auch andere Ursachen für die Verzögerung geben. S. z.B. [Patch] Mehr Informationen bei "ERROR: cTimer::Matches()" . Da dachte ich erst, daß es an einem zu lange gehaltenen Lock liegt. War aber nicht so. Es lag an einer Verzögerung im VDR Main Thread.
-
Also - nur mit softhddevice.
Ich bin kein Programmierer, aber für mich sieht das so aus, als würde softhddevice hier einen mutex halten, auf dessen Freigabe der VDR wartet - oder so ähnlich. Kann das sein? Hilft das weiter?
Wenn nein, was sollte ich noch machen?Code
Display More(gdb) info thread Id Target Id Frame * 1 Thread 0x7eff2188a780 (LWP 3719) "vdr" 0x00007eff212989d0 in __lll_lock_wait () from /lib64/libc.so.6 2 Thread 0x7eff0952f6c0 (LWP 3840) "data-loop.0" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 3 Thread 0x7eff0a5426c0 (LWP 3839) "alsa-pipewire" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 4 Thread 0x7efee0ffa6c0 (LWP 3818) "oglThread" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 5 Thread 0x7efee17fb6c0 (LWP 3813) "device 1 TS buf" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 6 Thread 0x7efee2ffd6c0 (LWP 3812) "SVDRP server ha" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 7 Thread 0x7efee37fe6c0 (LWP 3811) "device 1 receiv" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 8 Thread 0x7efee3fff6c0 (LWP 3808) "vdr:gdrv0" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 9 Thread 0x7efee8e136c0 (LWP 3807) "vdr:traceq0" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 10 Thread 0x7efee96146c0 (LWP 3806) "LIRC remote con" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 11 Thread 0x7efee9e156c0 (LWP 3805) "softhddev video" 0x00007eff21297f9a in __internal_syscall_cancel () from /lib64/libc.so.6 12 Thread 0x7efeee5fc6c0 (LWP 3804) "vdr:gdrv0" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 13 Thread 0x7efeeedfd6c0 (LWP 3803) "vdr:traceq0" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 14 Thread 0x7efeef5fe6c0 (LWP 3801) "vdr:gdrv0" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 15 Thread 0x7efeefdff6c0 (LWP 3800) "vdr:traceq0" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 16 Thread 0x7efefc9fe6c0 (LWP 3799) "vdr:sh0" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 17 Thread 0x7efefd1ff6c0 (LWP 3798) "vdr:disk$0" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 18 Thread 0x7eff1350b6c0 (LWP 3794) "softhddev audio" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 19 Thread 0x7eff09d306c0 (LWP 3740) "alsa-pipewire" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 20 Thread 0x7eff123076c0 (LWP 3738) "frontend 0/0 tu" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 21 Thread 0x7eff12d0a6c0 (LWP 3735) "device 1 sectio" 0x00007eff212a4772 in __syscall_cancel_arch () from /lib64/libc.so.6 (gdb) bt #0 0x00007eff212989d0 in __lll_lock_wait () from /lib64/libc.so.6 #1 0x00007eff2129f3f1 in pthread_mutex_lock@@GLIBC_2.2.5 () from /lib64/libc.so.6 #2 0x00007eff1ea62f0c in VideoThreadLock () at video.c:21404 #3 VideoOsdClear () at video.c:20986 #4 0x00007eff1ea77f02 in cOglOsd::~cOglOsd (this=0x48d05680) at openglosd.cpp:2176 #5 0x00007eff1ea7818e in cOglOsd::~cOglOsd (this=0x48d05680) at openglosd.cpp:2179 #6 0x000000000053b6da in cSkinLCARSDisplayMenu::~cSkinLCARSDisplayMenu (this=0x48d2d9e0) at skinlcars.c:958 #7 0x000000000053b7ae in cSkinLCARSDisplayMenu::~cSkinLCARSDisplayMenu (this=0x48d2d9e0) at skinlcars.c:959 #8 0x00000000004fe57e in DELETENULL<cSkinDisplayMenu> (p=@0x5ee680: 0x0) at /home/hirmkem/entw/src/vdr/build/tools.h:49 #9 cOsdMenu::~cOsdMenu (this=0x48cff6b0) at osdbase.c:122 #10 0x00000000004f3974 in cMenuMain::~cMenuMain (this=0x48cff6b0) at /home/hirmkem/entw/src/vdr/build/menu.h:106 #11 cMenuMain::~cMenuMain (this=0x48cff6b0) at /home/hirmkem/entw/src/vdr/build/menu.h:106 #12 0x000000000048ce44 in main (argc=<optimized out>, argv=<optimized out>) at vdr.c:1249 (gdb) frame 2 #2 0x00007eff1ea62f0c in VideoThreadLock () at video.c:21404 21404 if (pthread_mutex_lock(&VideoLockMutex)) { (gdb) p VideoLockMutex $1 = {__data = {__lock = 2, __count = 0, __owner = 3805, __nusers = 1, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = "\002\000\000\000\000\000\000\000\335\016\000\000\001", '\000' <repeats 26 times>, __align = 2} -
Falls es daran liegt, daß ein Lock zu lange gehalten wird, hilft:
1. Den Patch anwenden
2. MAX_LOCK_TIME ändern, z.B. auf #define MAX_LOCK_TIME 1 (1 wie 1 Sekunde). Dann werden alle Treads gemeldet, die einen Lock länger als 1 s halten
3. VDR neu übersetzen.
Wenn ich das übersetze und den vdr mit -V aufrufe, bekomme ich direkt einen Segfault:
Code
Display More./vdr -V vdr (2.8.1/12) - The Video Disk Recorder channellists (0.0.6) - Manage your channellists control (1.0.2) - telnet remote control dvbhddevice (2.2.0) - HD Full Featured DVB device epgsync (1.0.2) - Import EPG of an other VDR graphtftng (0.6.17-GIT76a0802) - VDR OSD on TFT iptv (2.6.13-GIT-8a1f990) - Experience the IPTV osdteletext (2.3.1) - Displays teletext on the OSD skinnopacity (1.1.20) - 'nOpacity' Skin softhddevice (2.4.8-GIT5d6611e) - A software and GPU emulated UHD device status (2.6.2) - Status monitor test svdrpservice (1.0.0) - SVDRP client tvscraper (1.2.15) - Scraping movie and series info vaapivideo (1.4.2) - Hardware-accelerated video playback with VAAPI websocket (0.0.2) - Send VDR status via websocket Segmentation fault (core dumped) ./vdr -V -
Participate now!
Don’t have an account yet? Register yourself now and be a part of our community!