summaryrefslogtreecommitdiff
path: root/menu_main.c
diff options
context:
space:
mode:
authorTomJoad <TomJoad@vdr-portal.de>2017-06-07 21:54:19 +0200
committerFrank Neumann <fnu@yavdr.org>2017-06-07 21:54:19 +0200
commitcb315679bdb548a4bfd5d6d9341f6f15bd96223b (patch)
treef841d0967306fdd2d5bccea9c9f91929abc1cfaa /menu_main.c
parent9bfa02dd31798d816ada3ebec1c4d7242300cf95 (diff)
downloadvdr-plugin-epgsearch-cb315679bdb548a4bfd5d6d9341f6f15bd96223b.tar.gz
vdr-plugin-epgsearch-cb315679bdb548a4bfd5d6d9341f6f15bd96223b.tar.bz2
Fix some lock sequences.
Diffstat (limited to 'menu_main.c')
-rw-r--r--menu_main.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/menu_main.c b/menu_main.c
index 2800114..912affe 100644
--- a/menu_main.c
+++ b/menu_main.c
@@ -56,10 +56,11 @@ cMenuSearchMain::cMenuSearchMain(void)
shiftTime = 0;
InWhatsOnMenu = false;
InFavoritesMenu = false;
+ const cChannel *channel;
+ {
LOCK_CHANNELS_READ;
- LOCK_SCHEDULES_READ;
- schedules = Schedules;
- const cChannel *channel = Channels->GetByNumber(cDevice::CurrentChannel());
+ channel = Channels->GetByNumber(cDevice::CurrentChannel());
+ }
if (channel) {
cMenuWhatsOnSearch::SetCurrentChannel(channel->Number());
if (EPGSearchConfig.StartMenu == 0 || forceMenu != 0)
@@ -73,8 +74,9 @@ cMenuSearchMain::cMenuSearchMain(void)
}
if ((EPGSearchConfig.StartMenu == 1 || forceMenu == 1) && forceMenu != 2)
{
+ LOCK_SCHEDULES_READ;
InWhatsOnMenu = true;
- AddSubMenu(new cMenuWhatsOnSearch(schedules, cDevice::CurrentChannel()));
+ AddSubMenu(new cMenuWhatsOnSearch(Schedules, cDevice::CurrentChannel()));
}
if (forceMenu == 3)
ShowSummary();
@@ -117,8 +119,11 @@ void cMenuSearchMain::PrepareSchedule(const cChannel *Channel)
cMenuTemplate* ScheduleTemplate = cTemplFile::GetTemplateByName("MenuSchedule");
eventObjects.Clear();
- if (schedules) {
- const cSchedule *Schedule = schedules->GetSchedule(Channel);
+ const cSchedule *Schedule;
+ {
+ LOCK_SCHEDULES_READ;
+ Schedule = Schedules->GetSchedule(Channel);
+ }
currentChannel = Channel->Number();
if (Schedule && Schedule->Events()->First())
{
@@ -153,7 +158,6 @@ void cMenuSearchMain::PrepareSchedule(const cChannel *Channel)
// timeb tnow;
// ftime(&tnow);
// isyslog("duration epgs prepsched: %d (%d)", tnow.millitm - tstart.millitm + ((tnow.millitm - tstart.millitm<0)?1000:0), Count());
- }
}
if (shiftTime)
{
@@ -431,7 +435,10 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
state = osContinue;
break;
case kGreen:
- if (schedules)
+ {
+ LOCK_CHANNELS_READ;
+ LOCK_SCHEDULES_READ;
+ if (Schedules)
{
if (HasSubMenu() && !InWhatsOnMenu && !InFavoritesMenu)
{
@@ -448,7 +455,6 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
cMenuMyScheduleItem* Item = (cMenuMyScheduleItem *)Get(Current());
if (Item && Item->event)
{
- LOCK_CHANNELS_READ;
const cChannel *channel = Channels->GetByChannelID(Item->event->ChannelID(), true, true);
if (channel)
ChannelNr = channel->Number();
@@ -462,12 +468,11 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
else
{
InWhatsOnMenu = true;
- return AddSubMenu(new cMenuWhatsOnSearch(schedules, ChannelNr));
+ return AddSubMenu(new cMenuWhatsOnSearch(Schedules, ChannelNr));
}
}
else
{
- LOCK_CHANNELS_READ;
const cChannel *channel = Channels->GetByNumber(currentChannel-1,-1);
if (channel) {
@@ -481,8 +486,12 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
return osContinue;
}
}
+ }
case kYellow:
- if (schedules)
+ {
+ LOCK_CHANNELS_READ;
+ LOCK_SCHEDULES_READ;
+ if (Schedules)
{
if (HasSubMenu())
{
@@ -496,11 +505,10 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
{
cMenuWhatsOnSearch::currentShowMode = showNext;
InWhatsOnMenu = true;
- return AddSubMenu(new cMenuWhatsOnSearch(schedules, cMenuWhatsOnSearch::CurrentChannel()));
+ return AddSubMenu(new cMenuWhatsOnSearch(Schedules, cMenuWhatsOnSearch::CurrentChannel()));
}
else
{
- LOCK_CHANNELS_READ;
const cChannel *channel = Channels->GetByNumber(currentChannel+1,1);
if (channel) {
PrepareSchedule(channel);
@@ -514,6 +522,7 @@ eOSState cMenuSearchMain::ProcessKey(eKeys Key)
}
}
break;
+ }
case kBlue:
if (HasSubMenu())
{