Ich teste mal auf dem VDR-Client, ob das da auch passiert.
Wenn ja, ist es wohl ein Codeproblem, wenn nein, eines von meinem VDR-Server.
Ich teste mal auf dem VDR-Client, ob das da auch passiert.
Wenn ja, ist es wohl ein Codeproblem, wenn nein, eines von meinem VDR-Server.
So, also - mit VDR 2.6.6 und allen Plugins in den neuesten Versionen bekomme ich folgende Ergebnisse:
Auf dem VDR-Client (openSUSE Tumbleweed latest snapshot):
- control funktioniert
- remote funktioniert
Auf dem VDR-Server (openSUSE Leap 15.5 latest hotfixes):
- control crasht
- remote crasht
wobei es offenbar zwei verschiedene Stellen sind, an denen die Crashes passieren.
Dumps siehe Anhänge.
So wie es ausschaut, crasht dein VDR wegen einem Plugin namens ''epg2vdr", aber nicht im control Plugin.
Ich kenne das Plugin nicht.
Das hier sind die Zeilen kurz vor dem Problem:
Stack trace of thread 358:
#0 0x00007f11fac0ed2b raise (libc.so.6 0x4ad2b)
#1 0x00007f11fac103e5 abort (libc.so.6 0x4c3e5)
#2 0x00007f11fac54c27 __libc_message (libc.so.6 0x90c27)
#3 0x00007f11fac5ccca malloc_printerr (libc.so.6 0x98cca)
#4 0x00007f11fac5eb50 _int_free (libc.so.6 0x9ab50)
#5 0x00007f11faf0c1d5 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (libstdc .so.6 0x1511d5)
#6 0x00007f11faf0da30 std::string::_M_append(char const*, unsigned long) (libstdc .so.6 0x152a30)
#7 0x00007f11f89c834d std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (libvdr-epg2vdr.so.2.6.6 0x8834d)
#8 0x00007f11f89ca5aa cDbTable::init(int) (libvdr-epg2vdr.so.2.6.6 0x8a5aa)
#9 0x00007f11f89abf90 cMenuDb::initDb() (libvdr-epg2vdr.so.2.6.6 0x6bf90)
#10 0x00007f11f89addc4 cMenuDb::cMenuDb() (libvdr-epg2vdr.so.2.6.6 0x6ddc4)
#11 0x00007f11f8969f23 cMenuSetupEPG2VDR::cMenuSetupEPG2VDR() (libvdr-epg2vdr.so.2.6.6 0x29f23)
#12 0x00007f11f8969fab cPluginEPG2VDR::SetupMenu() (libvdr-epg2vdr.so.2.6.6 0x29fab)
#13 0x00000000004dfb95 cMenuSetupPlugins::ProcessKey(eKeys) (vdr 0xdfb95)
#14 0x00000000004f0d6f cOsdMenu::ProcessKey(eKeys) (vdr 0xf0d6f)
#15 0x00000000004dfc1b cMenuSetup::ProcessKey(eKeys) (vdr 0xdfc1b)
#16 0x00000000004f0d6f cOsdMenu::ProcessKey(eKeys) (vdr 0xf0d6f)
#17 0x00000000004dfe71 cMenuMain::ProcessKey(eKeys) (vdr 0xdfe71)
#18 0x00000000004804ae main (vdr 0x804ae)
#19 0x00007f11fabf924d __libc_start_main (libc.so.6 0x3524d)
#20 0x00000000004827fa _start (vdr 0x827fa)
Display More
So wie es ausschaut, crasht dieses Plugin bei der Verwendung von Texten/Zeichenketten (std::string).
Das Seltsame ist, dass es zwar in epg2vdr crasht, aber immer nur bei der Benutzung von control (nicht aber von remote).
Und bei remote ist der Crash ja irgendwo bei der Font-Verarbeitung (nicht aber bei control).
Und das nur bei einem von zwei VDRs, die beide denselben Stand haben (bis aufs OS).
So sieht es beim remote Plugin aus.
#1 0x00007fb5bca103e5 abort (libc.so.6 0x4c3e5)
#2 0x00007fb5bca54c27 __libc_message (libc.so.6 0x90c27)
#3 0x00007fb5bca5ccca malloc_printerr (libc.so.6 0x98cca)
#4 0x00007fb5bca5eb50 _int_free (libc.so.6 0x9ab50)
#5 0x00007fb5bce1af79 FT_Remove_Module (libfreetype.so.6 0x1af79)
#6 0x00007fb5bce1b4a0 FT_Done_Library (libfreetype.so.6 0x1b4a0)
#7 0x00007fb5bce0f15e FT_Done_FreeType (libfreetype.so.6 0xf15e)
#8 0x00000000004c3d19 cFreetypeFont::~cFreetypeFont() (vdr 0xc3d19)
#9 0x00000000004c3d69 cFreetypeFont::~cFreetypeFont() (vdr 0xc3d69)
#10 0x00000000004c4008 cFont::SetFont(eDvbFont, char const*, int) (vdr 0xc4008)
#11 0x00000000004fc741 cOsdProvider::UpdateOsdSize(bool) (vdr 0xfc741)
#12 0x00000000004dfb44 cMenuSetupPlugins::ProcessKey(eKeys) (vdr 0xdfb44)
#13 0x00000000004f0d6f cOsdMenu::ProcessKey(eKeys) (vdr 0xf0d6f)
#14 0x00000000004dfc1b cMenuSetup::ProcessKey(eKeys) (vdr 0xdfc1b)
#15 0x00000000004f0d6f cOsdMenu::ProcessKey(eKeys) (vdr 0xf0d6f)
#16 0x00000000004dfe71 cMenuMain::ProcessKey(eKeys) (vdr 0xdfe71)
#17 0x00000000004804ae main (vdr 0x804ae)
#18 0x00007fb5bc9f924d __libc_start_main (libc.so.6 0x3524d)
#19 0x00000000004827fa _start (vdr 0x827fa)
Display More
Hier crasht es in cFont::SetFont(eDvbFont, char const*, int)
Installiere doch mal die Fonts auf dem Server, die Du auf dem Client installiert hat.
Und teste danach nochmal auf dem Server ...
Hab ich schon, hilft nix - und das ist doch auch nur im einen Fall die Stelle, an der der Dump auftritt.
Ohne epg2vdr funktioniert control.
Ohne epg2vdr funktioniert control.
Hm, und was mache ich dann`? epg2vdr brauche ich halt auch.
Witzigerweise funktionieren control und remote beide ausgerechnet gegen den Client, bei dem ich sie eigentlich nicht brauche, weil er eben nicht headless ist - und der hat auch epg2vdr.
Hm, und was mache ich dann`? epg2vdr brauche ich halt auch.
Witzigerweise funktionieren control und remote beide ausgerechnet gegen den Client, bei dem ich sie eigentlich nicht brauche, weil er eben nicht headless ist - und der hat auch epg2vdr.
ich habe das gefühl das mit der vdr version 2.6.6 ,
einige plugins probleme haben, restfulapi schmeist segfaults
osdtelext auch.
Wann passieren diese Crashs eigentlich genau?
Braucht es irgend eine User-Interaktion dazu?
Bei den beiden letzten vdr.dump-*.txt sieht es irgendwie so aus, als ob man sich gerade im Menü befindet.
Genauer gesagt im Setup-Menü von einem Plugin und gerade "Ok" gedrückt wurde.
Den Zustand hätte ich so jetzt nicht erwartet, das kann aber eine Fehleinschätzung sein, besonders viel mit den Menüs habe ich mich noch nicht beschäftigt.
Ihr könnt ja mal versuchen raus zu finden, welche Änderung die Fehler auslöst.
Wenn man das weiß, erleichtert einem das die Suche nach dem Fehler erheblich, weil man ungefähr weiß wonach man schauen muss.
So viele Änderungen zwischen 2.6.5 und 2.6.6 gab es ja gar nicht, das sollte recht schnell gehen.
Der aussichtsreichste Kandidat wären für mich nach wie vor:
Added the move constructor to cString for better performance
Naja, in den Plugins remote und control ist es immer eine Useraktion, weil über die ja vor allem das Menü bedient wird.
Also ja, immer nach dem Connect und ein paarmal Anwählen von Menüpunkten passiert es.
Es passiert aber nicht beim Laden des Plugin.
Wie gesagt - die Dumps hängen an den entsprechenden Postings mit dran.
Gut, das erklärt, warum er im Menü abstürzt.
Die Ursache dürfte aber irgendwo "früher" gewesen sein und jetzt nicht mehr zu sehen.
Das deutet dann auch stark auf den "move construktor" hin.
Ich habe jetzt folgenden Test durchgeführt
a) vdr-2.6.6 mit epg2vdr und control gestartet
b) vdr-2.6.6 mit epg2vdr und softhddevice gestartet
In beiden Fällen stürzt vdr absolut zuverlässig ab, wenn ich im Haupmenü
'EPG and Timer' und dann auf 'Timer' gehe.
Der Fehler liegt eindeutig an epg2vdr. Auch der Stack trace sieht gleich aus.
Hups - bei mir passiert das nur in control und remote und nur auf dem headless Server.
Auf dem Client klappen remote und control problemlos, obwohl dort ebenfalls epg2vdr (und softhddevice) läuft. Auch im OnScreen Menü am Fernseher kann ich problemlos alles anwählen, auch "EPG und Timer Service".
Gefühlt haben so einige Plugins mit der 2.6.6 VDR Version Probleme
restfulapi, osdtelext
EPG2VDR setze ich nicht ein, kenne mich also auch 0 damit aus.
Kann man das ohne Datenbank überhaupt sinnvoll testen?
Muss ich da was einstellen?
osdtelext benutze ich selber und habe es eben mal angetestet. Abstürze bekomme ich aber keine hin.
Allerdings bekomme ich auch keinen Videotext angezeigt (Seite nicht vorhanden, bitte warten).
Bislang hatte das immer geklappt, soweit ich mich erinnere. Hab's hin bekommen, war mein Fehler.
Abstürze gibt es aber immer noch nicht.
In beiden Fällen stürzt vdr absolut zuverlässig ab, wenn ich im Haupmenü
'EPG and Timer' und dann auf 'Timer' gehe.
nobanzai hatte die Abstürze aber immer im Einstellungsmenü .
Evtl. doch was mit dem Menü an sich? Oder das Menü hat gar nichts damit zu tun und ist nur das Opfer.
Die Crashs waren auch wieder bei einem free(). Das kann doch eigentlich nur bedeuten, dass auch hier was mit dem Pointer nicht gestimmt hat.
Das Einstellungsmenü von epg2vdr ging bei mir in allen Tests ohne Probleme. Seltsam.
Ich habe es mal mit ElectricFence probiert und da gibt es mit dem EPG2VDR-Plugin beliebig reproduzierbar nach Sekunden einen Abbruch.
ElectricFence Exiting: mprotect() failed: Speicherzugriffsfehler (Speicherabzug geschrieben)
Das passiert auch mit dem EPG2VDR-Plugin allein.
Und auch nur mit dem EPG2VDR-Plugin, nicht mit osdtelext und control.
Allerdings kann ich den VDR mit ElectricFence nicht mehr von der Konsole bedienen, konnte osdtelext also nicht näher testen. (Bei EPG2VDR komme ich gar nicht so weit.)
Wer es auch versuchen will, ElectricFence gibt es bei Debian als Paket und es ist recht einfach:
EF_ALLOW_MALLOC_0=1 LD_PRELOAD=/usr/lib/libefence.so ./vdr -Pepg2vdr ......
Der Fehler ist immer cSchedule, allerdings an unterschiedlichen Stellen, hier mal ein Beispiel:
Thread 6 (Thread 0x7fe230684700 (LWP 80738)):
#0 0x00007fe23bed79af in __GI___poll (fds=0x7fe230683bc0, nfds=1, timeout=150) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00005646b1445f19 in cPoller::Poll (this=this@entry=0x7fe230683bc0, TimeoutMs=<optimized out>) at tools.c:1566
#2 0x00005646b1409dca in cKbdRemote::ReadKey (this=this@entry=0x7fe22a130f48) at remote.c:310
#3 0x00005646b1409e65 in cKbdRemote::ReadKeySequence (this=this@entry=0x7fe22a130f48) at remote.c:326
#4 0x00005646b140a084 in cKbdRemote::Action (this=0x7fe22a130f48) at remote.c:392
#5 0x00005646b1439be1 in cThread::StartThread (Thread=0x7fe22a130f68) at thread.c:293
#6 0x00007fe23c40aea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#7 0x00007fe23bee3a6f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 5 (Thread 0x7fe22ee81700 (LWP 80731)):
#0 futex_abstimed_wait_cancelable (private=0, abstime=0x7fe22ee7fd40, clockid=786955472, expected=0, futex_word=0x7fe22ee7fdd0) at ../sysdeps/nptl/futex-internal.h:323
#1 __pthread_cond_wait_common (abstime=0x7fe22ee7fd40, clockid=786955472, mutex=0x7fe22ee7fd80, cond=0x7fe22ee7fda8) at pthread_cond_wait.c:520
#2 __pthread_cond_timedwait (cond=cond@entry=0x7fe22ee7fda8, mutex=mutex@entry=0x7fe22ee7fd80, abstime=abstime@entry=0x7fe22ee7fd40) at pthread_cond_wait.c:656
#3 0x00005646b143938f in cCondWait::Wait (this=this@entry=0x7fe22ee7fd80, TimeoutMs=786955584, TimeoutMs@entry=100) at thread.c:86
#4 0x00005646b14393e8 in cCondWait::SleepMs (TimeoutMs=TimeoutMs@entry=100) at thread.c:75
#5 0x00005646b1412362 in cSectionHandler::Action (this=0x7fe2311bde60) at sections.c:185
#6 0x00005646b1439be1 in cThread::StartThread (Thread=0x7fe2311bde60) at thread.c:293
#7 0x00007fe23c40aea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#8 0x00007fe23bee3a6f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 4 (Thread 0x7fe22f682700 (LWP 80730)):
#0 0x00007fe23bed79af in __GI___poll (fds=fds@entry=0x7fe22f680e18, nfds=nfds@entry=1, timeout=timeout@entry=50) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00005646b13a99e6 in cDvbCiAdapter::Read (MaxLength=4096, Buffer=0x7fe22f680e44 "", this=0x7fe23119bf10) at dvbci.c:52
#2 cDvbCiAdapter::Read (this=0x7fe23119bf10, Buffer=0x7fe22f680e44 "", MaxLength=4096) at dvbci.c:46
#3 0x00005646b138d057 in cCiAdapter::Action (this=0x7fe23119bf10) at ci.c:2158
#4 0x00005646b1439be1 in cThread::StartThread (Thread=0x7fe23119bf10) at thread.c:293
#5 0x00007fe23c40aea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#6 0x00007fe23bee3a6f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 3 (Thread 0x7fe23bd21780 (LWP 80724)):
#0 futex_abstimed_wait (private=0, abstime=0x0, clockid=0, expected=3, futex_word=<optimized out>) at ../sysdeps/nptl/futex-internal.h:287
#1 __pthread_rwlock_rdlock_full (abstime=0x0, clockid=0, rwlock=0x5646b14c4c30 <cChannels::channels+48>, rwlock@entry=0x0) at pthread_rwlock_common.c:460
#2 __GI___pthread_rwlock_rdlock (rwlock=rwlock@entry=0x5646b14c4c30 <cChannels::channels+48>) at pthread_rwlock_rdlock.c:27
#3 0x00005646b14399ef in cRwLock::Lock (this=this@entry=0x5646b14c4c30 <cChannels::channels+48>, Write=Write@entry=false, TimeoutMs=TimeoutMs@entry=0) at thread.c:190
#4 0x00005646b143bf62 in cStateLock::Lock (this=this@entry=0x5646b14c4c20 <cChannels::channels+32>, StateKey=..., Write=Write@entry=false, TimeoutMs=0) at thread.c:732
#5 0x00005646b14479a6 in cListBase::Lock (this=this@entry=0x5646b14c4c00 <cChannels::channels>, StateKey=..., Write=Write@entry=false, TimeoutMs=<optimized out>) at tools.c:2206
#6 0x00005646b13831c7 in cChannels::GetChannelsRead (StateKey=..., TimeoutMs=<optimized out>) at channels.c:858
#7 0x00005646b1448835 in cChannels_Lock::cChannels_Lock (this=0x7ffe7222de50, Write=<optimized out>) at channels.h:262
#8 0x00005646b137d312 in main (argc=<optimized out>, argv=<optimized out>) at vdr.c:916
Thread 2 (Thread 0x7fe22e680700 (LWP 80734)):
#0 futex_abstimed_wait_cancelable (private=0, abstime=0x7fe22e67fdb0, clockid=778566976, expected=0, futex_word=0x7fe230a0bfe8) at ../sysdeps/nptl/futex-internal.h:323
#1 __pthread_cond_wait_common (abstime=0x7fe22e67fdb0, clockid=778566976, mutex=0x7fe230a0bf60, cond=0x7fe230a0bfc0) at pthread_cond_wait.c:520
#2 __pthread_cond_timedwait (cond=cond@entry=0x7fe230a0bfc0, mutex=mutex@entry=0x7fe230a0bf60, abstime=abstime@entry=0x7fe22e67fdb0) at pthread_cond_wait.c:656
#3 0x00005646b1439553 in cCondVar::TimedWait (this=this@entry=0x7fe230a0bfc0, Mutex=..., TimeoutMs=TimeoutMs@entry=1000) at thread.c:142
#4 0x00005646b13a4ad8 in cDvbTuner::Action (this=0x7fe230a0b838) at dvbdevice.c:1767
#5 0x00005646b1439be1 in cThread::StartThread (Thread=0x7fe230a0b838) at thread.c:293
#6 0x00007fe23c40aea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#7 0x00007fe23bee3a6f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 1 (Thread 0x7fe22fe83700 (LWP 80729)):
#0 __strlen_sse2 () at ../sysdeps/x86_64/multiarch/strlen-vec.S:133
#1 0x00007fe23c4f453f in EF_Printv () from /usr/lib/libefence.so
#2 0x00007fe23c4f4705 in EF_Exitv () from /usr/lib/libefence.so
#3 0x00007fe23c4f47ac in EF_Exit () from /usr/lib/libefence.so
#4 0x00007fe23c4f36d5 in ?? () from /usr/lib/libefence.so
#5 0x00007fe23c4f3e0e in memalign () from /usr/lib/libefence.so
#6 0x00007fe23c1c00b5 in operator new(unsigned long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#7 0x00005646b1447f84 in cHashBase::Add (this=this@entry=0x7fe228dddfc0, Object=Object@entry=0x7fe227f54f88, Id=27443) at tools.c:2416
#8 0x00005646b13bac7d in cSchedule::HashEvent (this=this@entry=0x7fe228dddf00, Event=Event@entry=0x7fe227f54f88) at epg.h:101
#9 0x00005646b13bacf8 in cSchedule::AddEvent (this=this@entry=0x7fe228dddf00, Event=Event@entry=0x7fe227f54f88) at epg.c:945
#10 0x00005646b13bb18f in cEvent::Read (f=0x7fe231455e28, Schedule=0x7fe228dddf00, Line=@0x7fe22fe82d8c: 7412) at epg.c:563
#11 0x00005646b13bc779 in cSchedule::Read (f=0x7fe231455e28, Schedules=0x5646b14c6980 <cSchedules::schedules>) at epg.c:1194
#12 0x00005646b13bc80c in cSchedules::Read (f=0x7fe231455e28) at epg.c:1347
#13 0x00005646b1439be1 in cThread::StartThread (Thread=0x7ffe7222deb0) at thread.c:293
#14 0x00007fe23c40aea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#15 0x00007fe23bee3a6f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Display More
Vom EPG2VDR-Plugin sehe ich hier keinen Thread.
Das könnte auf den EPG-Handler hindeuten, der wird AFAIK von VDR ausgeführt.
Das EPG2VDR-Plugin habe ich lediglich mit -Pepg2vdr gestartet.
Es ist völlig unkonfiguriert und eine Daenbank habe ich auch nicht am laufen.
Es gibt beim Start auch ein paar Fehlermeldungen:
vdr: epg2vdr: Info: Calling mysql_library_init()
vdr: [16521] CAM 1: no module present
vdr: [16521] CAM 2: no module present
vdr: epg2vdr: Set locale to 'de_DE.UTF-8'
vdr: epg2vdr: detected UTF-8
vdr: [16515] ERROR (tools.c,513): /var/cache/vdr/epgimages: Keine Berechtigung
vdr: epg2vdr: could not access or create Directory /var/cache/vdr/epgimages/images
vdr: epg2vdr: Error: Can' open file '../video0/plugins/epg2vdr//epg.dat', error was 'Datei oder Verzeichni
vdr: epg2vdr: Fatal: Dictionary not loaded, aborting!
vdr: epg2vdr: Initialization failed, start of plugin aborted!
kernel: [ 8210.393297] epg data reader[16520]: segfault at 0 ip 00007f71f725c9f6 sp 00007f71eb25dac8 error
Display More
Einen Speicherzugriffsfehler sollte das aber eigentlich auf keine Fall nicht auslösen.
Dann bin ich auf was merkwürdiges gestoßen:
//***************************************************************************
// Define tEventID again, to create a compiler error case it was defines different
//***************************************************************************
typedef u_int32_t tEventID; // on error vdr >= 2.3.1 and patch is not applied!!
In der README steht aber:
- Patch the VDR. Patches found in patches/ since vdr 1.7.27.
For Versions after 1.7.31 you need only the epghandler-segment-transfer.patch
Sinve VDR 2.1.1 no patch is needed!
Unter /patches liegen auch Patches für vdr-2.2.0 und 2.3.0.
Was stimmt denn nun ?
Und der eine Patch für VDR-2.3.0 fummelt ausgerechnet am Schedules- und ChannelsStatekey herum.
Don’t have an account yet? Register yourself now and be a part of our community!