eitd/sectionsd.cpp: check myCurrentEvent for expire before using it

This commit is contained in:
[CST] Focus
2014-02-05 12:47:42 +04:00
parent 3818875a80
commit 201022450c
2 changed files with 22 additions and 0 deletions

View File

@@ -2306,6 +2306,24 @@ void CEitManager::getEventsServiceKey(t_channel_id serviceUniqueKey, CChannelEve
unlockEvents();
}
/* invalidate current/next events, if current event times expired */
void CEitManager::checkCurrentNextEvent(void)
{
time_t curtime = time(NULL);
writeLockEvents();
if (scanning || !myCurrentEvent || myCurrentEvent->times.empty()) {
unlockEvents();
return;
}
if ((long)(myCurrentEvent->times.begin()->startzeit + myCurrentEvent->times.begin()->dauer) < (long)curtime) {
delete myCurrentEvent;
myCurrentEvent = NULL;
delete myNextEvent;
myNextEvent = NULL;
}
unlockEvents();
}
/* send back the current and next event for the channel id passed to it
* Works like that:
* - if the currently running program is requested, return myCurrentEvent and myNextEvent,
@@ -2329,6 +2347,8 @@ void CEitManager::getCurrentNextServiceKey(t_channel_id uniqueServiceKey, CSecti
uniqueServiceKey &= 0xFFFFFFFFFFFFULL;
checkCurrentNextEvent();
readLockEvents();
/* if the currently running program is requested... */
if (uniqueServiceKey == messaging_current_servicekey) {
@@ -2587,6 +2607,7 @@ bool CEitManager::getActualEPGServiceKey(const t_channel_id channel_id, CEPGData
dprintf("[commandActualEPGchannelID] Request of current EPG for " PRINTF_CHANNEL_ID_TYPE "\n", channel_id);
t_channel_id uniqueServiceKey = channel_id & 0xFFFFFFFFFFFFULL;
checkCurrentNextEvent();
readLockEvents();
if (uniqueServiceKey == messaging_current_servicekey) {
if (myCurrentEvent) {