compile fix >=vdr-2.3.1 http://www.vdr-portal.de/board1-news/board2-vdr-news/p1254875-announce-vdr-developer-version-2-3-1/#post1254875 Signed-of-by: Joerg Bornkessel (25 Okt 2015) diff -rupN b/zappilotosd.c a/zappilotosd.c --- b/zappilotosd.c 2015-06-24 14:32:15.000000000 +0200 +++ a/zappilotosd.c 2015-10-22 18:39:36.000000000 +0200 @@ -69,7 +69,7 @@ cZappilotOsd::~cZappilotOsd(void) void cZappilotOsd::DisplayChannel(const cChannel *Channel) { - int BufSize = 255; + int BufSize = 1020; if (Channel) { if (Channel->GroupSep()) @@ -172,11 +172,11 @@ void cZappilotOsd::UpdateEPGInfo(int Now titleFollowingInfo = NULL; subtitlePresentInfo = NULL; subtitleFollowingInfo = NULL; - cSchedulesLock SchedulesLock; - const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock); + LOCK_SCHEDULES_READ; + LOCK_CHANNELS_READ; if (Schedules) { - const cSchedule *Schedule = Schedules->GetSchedule(Channels.GetByNumber(PilotChannelNumber)->GetChannelID()); + const cSchedule *Schedule = Schedules->GetSchedule(Channels->GetByNumber(PilotChannelNumber)->GetChannelID()); if (Schedule) { // Get Present event @@ -267,9 +267,9 @@ void cZappilotOsd::UpdateEPGInfo(int Now void cZappilotOsd::Show() { // find the actual current - cChannel *Channel = Channels.GetByNumber(cDevice::PrimaryDevice()->CurrentChannel()); - currentChannel = Channels.GetByNumber(cDevice::PrimaryDevice()->CurrentChannel()); - + LOCK_CHANNELS_READ; + const cChannel *Channel = Channels->GetByNumber(cDevice::PrimaryDevice()->CurrentChannel()); + currentChannel = Channel; if (Channel) { PilotChannelNumber = Channel->Number(); @@ -333,13 +333,14 @@ eOSState cZappilotOsd::ProcessKey(eKeys case k1 ... k9: if (number >= 0) { - if (number > Channels.MaxNumber()) + LOCK_CHANNELS_READ; + if (number > Channels->MaxNumber()) number = Key - k0; else number = number * 10 + Key - k0; if (number > 0) { - cChannel *channel = Channels.GetByNumber(number); + const cChannel *channel = Channels->GetByNumber(number); if (channel) { PilotChannelNumber = channel->Number(); @@ -363,7 +364,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys if (config.fastbrowse) { CursorDown(); - cChannel *channel = Channels.GetByNumber(PilotChannelNumber); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByNumber(PilotChannelNumber); if (channel) group = channel->Index()-1; break; @@ -380,7 +382,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys if (config.fastbrowse) { CursorUp(); - cChannel *channel = Channels.GetByNumber(PilotChannelNumber); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByNumber(PilotChannelNumber); if (channel) group = channel->Index()-1; break; @@ -396,7 +399,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys { if (group < 0) { - cChannel *channel = Channels.GetByNumber(PilotChannelNumber); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByNumber(PilotChannelNumber); if (channel) group = channel->Index(); } @@ -405,15 +409,18 @@ eOSState cZappilotOsd::ProcessKey(eKeys int SaveGroup = group; if (NORMALKEY(Key) == kRight) { - group = Channels.GetNextGroup(group); + LOCK_CHANNELS_READ; + group = Channels->GetNextGroup(group); } else { - group = Channels.GetPrevGroup(group < 1 ? 1 : group); + LOCK_CHANNELS_READ; + group = Channels->GetPrevGroup(group < 1 ? 1 : group); } if (group < 0) group = SaveGroup; - cChannel *channel = Channels.Get(group); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->Get(group); if (channel) { //DisplayChannel(channel); @@ -449,7 +456,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys else { CursorUp(); - cChannel *channel = Channels.GetByNumber(PilotChannelNumber); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByNumber(PilotChannelNumber); if (channel) group = channel->Index()-1; break; @@ -466,20 +474,22 @@ eOSState cZappilotOsd::ProcessKey(eKeys else { CursorDown(); - cChannel *channel = Channels.GetByNumber(PilotChannelNumber); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByNumber(PilotChannelNumber); if (channel) - group = channel->Index()-1; + group = channel->Index()-1; break; } case kNone: if (number && (int)cTimeMs::Now() - lastTime > 1000) { - if (Channels.GetByNumber(number)) + LOCK_CHANNELS_READ; + if (Channels->GetByNumber(number)) { PilotChannelNumber = number; lastTime = cTimeMs::Now(); number = 0; - cChannel *channel = Channels.GetByNumber(PilotChannelNumber); + const cChannel *channel = Channels->GetByNumber(PilotChannelNumber); if (channel) group = channel->Index()-1; } @@ -553,7 +563,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys { if (group < 0) { - cChannel *channel = Channels.GetByNumber(PilotChannelNumber); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByNumber(PilotChannelNumber); if (channel) group = channel->Index(); } @@ -562,15 +573,18 @@ eOSState cZappilotOsd::ProcessKey(eKeys int SaveGroup = group; if (NORMALKEY(Key) == kBlue) { - group = Channels.GetNextGroup(group); + LOCK_CHANNELS_READ; + group = Channels->GetNextGroup(group); } else { - group = Channels.GetPrevGroup(group < 1 ? 1 : group); + LOCK_CHANNELS_READ; + group = Channels->GetPrevGroup(group < 1 ? 1 : group); } if (group < 0) group = SaveGroup; - cChannel *channel = Channels.Get(group); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->Get(group); if (channel) { //DisplayChannel(channel); @@ -663,8 +677,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys void cZappilotOsd::CursorUp() { int n = PilotChannelNumber + 1; - cChannel *channel; - channel = Channels.GetByNumber(n, 1); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByNumber(n, 1); if (channel) { n = channel->Number(); @@ -678,8 +692,8 @@ void cZappilotOsd::CursorUp() void cZappilotOsd::CursorDown() { int n = PilotChannelNumber - 1; - cChannel *channel; - channel = Channels.GetByNumber(n, -1); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByNumber(n, -1); if (channel) { n = channel->Number(); @@ -693,9 +707,13 @@ void cZappilotOsd::CursorDown() void cZappilotOsd::CursorOK() { DrawMenu(0,2); - if (currentChannel != Channels.GetByNumber(PilotChannelNumber)) + LOCK_CHANNELS_READ; + const cChannel* chan = Channels->GetByNumber(PilotChannelNumber); + + if (currentChannel != chan) { - cChannel *Channel = Channels.GetByNumber(PilotChannelNumber); + LOCK_CHANNELS_READ; + const cChannel *Channel = Channels->GetByNumber(PilotChannelNumber); if (Channel) { cDevice::PrimaryDevice()->SwitchChannel(Channel, true); @@ -750,7 +768,8 @@ void cZappilotOsd::DisplayInfo(int delta displayTimer = NULL; displayChannel = Skins.Current()->DisplayChannel(true); } - cChannel *channel = Channels.GetByNumber(PilotChannelNumber); + LOCK_CHANNELS_READ; + const cChannel *channel = Channels->GetByNumber(PilotChannelNumber); if (!isempty(titlePresentInfo)) { @@ -778,14 +797,17 @@ void cZappilotOsd::DisplayExtraInfo() displayEvent = NULL; } - displayEvent = new cMenuEvent(Present,false,true); + + LOCK_TIMERS_READ; + LOCK_CHANNELS_READ; + displayEvent = new cMenuEvent(Timers, Channels, Present,false,true); displayEvent->Display(); } void cZappilotOsd::DisplayTimer() { - + if (displayChannel) { delete displayChannel; @@ -797,13 +819,17 @@ void cZappilotOsd::DisplayTimer() displayEvent = NULL; } + LOCK_TIMERS_WRITE; + cTimer *timer = new cTimer(Present); - cTimer *t = Timers.GetTimer(timer); + cTimer *t = Timers->GetMatch(Present); + if (t) { delete timer; timer = t; } + displayTimer=new cMenuEditTimer(timer, !t); displayTimer->Display(); } diff -rupN b/zappilotosd.h a/zappilotosd.h --- b/zappilotosd.h 2015-06-24 14:32:15.000000000 +0200 +++ a/zappilotosd.h 2015-10-22 18:40:02.000000000 +0200 @@ -39,7 +39,7 @@ class cZappilotOsd : public cOsdObject int offset; int lines; int type; - cChannel* currentChannel; + const cChannel* currentChannel; public: cZappilotOsd(void);