Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[vdr] OSD "ERROR: attempt to open OSD while it is already open!"



Hi,

When using femon to change channel to a encrypted one, with no CA available, VDR tries to show the "Channel unavailable" message, while the OSD is still tied to femon... crash...

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 16384 (LWP 30703)]
0x080cfd40 in cSkinSTTNGDisplayMessage::cSkinSTTNGDisplayMessage ()
(gdb) bt
#0 0x080cfd40 in cSkinSTTNGDisplayMessage::cSkinSTTNGDisplayMessage ()
#1 0x080d02a2 in cSkinSTTNG::DisplayMessage ()
#2 0x080c9c96 in cSkins::Message ()
#3 0x080883dd in cDevice::SwitchChannel ()
#4 0x0807e281 in cChannels::SwitchTo ()
#5 0x408aff40 in cFemonOsd::ProcessKey () from /usr/lib/vdr/plugins/libvdr-femon.so.1.3.12
#6 0x080ddd76 in main ()
(gdb)

I traces it back to cSkinSTTNGDisplayMessage::cSkinSTTNGDisplayMessage(void) in "skinsttng.c" :

854 osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - y1);
855 tArea Areas[] = { { x0, y0, x7 - 1, y1 - 1, 2 } };
856 osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));

Since cOsdProvider::NewOsd() can return NULL, osd->anything shouldn't be called without testing.
I simply cannot decide how to handle the case, since we are in the constructor cSkinSTTNGDisplayMessage::cSkinSTTNGDisplayMessage and many methods after that will try to use the osd property, and crash... The cSkinSTTNGDisplayMessage should simply abort it's construction, but I don't know how to write it in C++...

--
NH





Home | Main Index | Thread Index