Kannst du etwas konkreter werden? Wann genau passiert der Absturz und mit welchem Skin? Und ohne Logs bzw. Backtrace läuft das alles auf heiteres Rätselraten raus…
Also bei blackhole läuft's etwas stabiler, bei nopacity kann ich den Absturz ziemlich "zuverlässig" produzieren, wenn ich die Programmliste aufrufe und darin blättere (d.h. mehrere Kanallogos gleichzeitig angezeigt werden).
Hier mal ein gdb-log (weiß nicht, ob das ausreicht):
Program received signal SIGSEGV, Segmentation fault.
0x740227e4 in cPixmapContainer::CreatePixmap (this=0x623c0e40, num=0, Layer=2, ViewPort=..., DrawPort=...) at libcore/pixmapcontainer.c:89
89 pixmaps[num]->Fill(clrTransparent);
(gdb) backtrace full
#0 0x740227e4 in cPixmapContainer::CreatePixmap (this=0x623c0e40, num=0, Layer=2, ViewPort=..., DrawPort=...) at libcore/pixmapcontainer.c:89
MutexLock = {mutex = 0x740f9bd8, locked = true}
#1 0x74071fe8 in cView::CreateViewPixmap (this=0x623c0e40, num=0, pix=0x5f9109e0, size=<optimized out>) at views/view.c:205
pixSize = {point = {x = 3, y = 257}, size = {width = 164, height = 35}, static Null = {point = {x = 0, y = 0}, size = {width = 0, height = 0}, static Null = <same as static member of an already seen type>}}
layer = 2
transparency = <optimized out>
#2 0x74077370 in cViewListItem::DrawListItem (this=0x623c0e40, stringTokens=0x623c0ef0, intTokens=0x623c0f08) at views/view.c:763
posItem = {point = {x = 3, y = 257}, size = {width = 164, height = 35}, static Null = {point = {x = 0, y = 0}, size = {width = 0, height = 0}, static Null = <same as static member of an already seen type>}}
pix = 0x5f9109e0
pixCurrent = 0
#3 0x74099248 in cDisplayMenuItemSchedulesView::Render (this=0x623c0e40) at views/displaymenuitemview.c:360
No locals.
#4 0x74098a94 in cDisplayMenuListView::Render (this=0x63b0aec0) at views/displaymenulistview.c:223
i = <optimized out>
current = <optimized out>
#5 0x74020938 in Flush (this=0x7293b290) at displaymenu.c:281
doFlush = false
#6 cSDDisplayMenu::Flush (this=0x7293b290) at displaymenu.c:274
No locals.
#7 0x000ff5ec in cSkins::Flush (this=<optimized out>) at skins.c:394
No locals.
#8 0x000aadac in cInterface::GetKey (this=0x6e8b5c98, Wait=<optimized out>) at interface.c:38
No locals.
#9 0x0006fb48 in main (argc=<optimized out>, argv=<optimized out>) at vdr.c:1088
Alles anzeigen
Wie schon geschrieben, nach einem Absturz ist der GPU-Speicher vom rpihddevice nicht freigegeben
Der freie Speicher wird nach jedem Absturz weniger - aber irgendwann dann doch wieder mehr (und VDR läuft wieder)...
Könnte man da ein Tool schreiben, was generell allozierten Speicher von bspw. rpihddevice in der GPU frei gibt, oder kommt man da nach dem Beenden des VDR nicht mehr dran? Das wäre viel angenehmer als nach einem Absturz booten zu müssen. Man könnte das dann sogar im Start-Skript des vdr zur Sicherheit hinter den VDR-Aufruf schreiben. Damit wäre beim Beenden des VDR sichergestellt, dass die GPU den Speicher wieder frei hat.
/opt/vc/bin/vcdbg reloc
liefert da schon was - genauer gesagt fast ausschließlich (Open)VG-Einträge - leider nur fast, sonst könnte vielleicht beim Start einfach der komplette GPU-Speicher gelöscht werden?