{
eDebug("[eEPGCache] remove channel %p", chan);
messages.send(Message(Message::leaveChannel, chan));
- while(!it->second->can_delete)
+ while(!it->second->canDelete())
usleep(1000);
delete it->second;
m_knownChannels.erase(it);
eEPGCache::channel_data::channel_data(eEPGCache *ml)
:cache(ml)
,abortTimer(ml), zapTimer(ml),state(0)
- ,isRunning(0), haveData(0), can_delete(1)
+ ,isRunning(0), haveData(0)
,startPrivateTimer(ml)
{
CONNECT(zapTimer.timeout, eEPGCache::channel_data::startEPG);
}
singleLock l(cache->cache_lock);
cache->channelLastUpdated[channel->getChannelID()] = eDVBLocalTimeHandler::getInstance()->nowTime();
-#ifdef ENABLE_PRIVATE_EPG
- if (seenPrivateSections.empty())
-#endif
- can_delete=1;
return true;
}
return false;
eDebug("[EPGC] start caching events(%ld)", eDVBLocalTimeHandler::getInstance()->nowTime());
state=0;
haveData=0;
- can_delete=0;
for (int i=0; i < 3; ++i)
{
seenSections[i].clear();
seenSections[i].clear();
calcedSections[i].clear();
}
-#ifdef ENABLE_PRIVATE_EPG
- if (seenPrivateSections.empty())
-#endif
- can_delete=1;
}
}
++state;
if (m_PrivateConn)
m_PrivateConn=0;
#endif
- can_delete=1;
}
void eEPGCache::channel_data::readData( const __u8 *data)
{
if ( seenPrivateSections.find( data[6] ) == seenPrivateSections.end() )
{
- can_delete = 0;
cache->privateSectionRead(m_PrivateService, data);
seenPrivateSections.insert(data[6]);
}
if ( seenPrivateSections.size() == (unsigned int)(data[7] + 1) )
{
eDebug("[EPGC] private finished");
- if (!isRunning)
- can_delete = 1;
m_PrevVersion = (data[5] & 0x3E) >> 1;
startPrivateReader();
}
#define __epgcache_h_
#define ENABLE_PRIVATE_EPG 1
-#define ENABLE_MHW_EPG 1
#ifndef SWIG
eEPGCache *cache;
eTimer abortTimer, zapTimer;
int prevChannelState;
- __u8 state, isRunning, haveData, can_delete;
+ __u8 state, isRunning, haveData;
ePtr<eDVBChannel> channel;
ePtr<eConnection> m_stateChangedConn, m_NowNextConn, m_ScheduleConn, m_ScheduleOtherConn;
ePtr<iDVBSectionReader> m_NowNextReader, m_ScheduleReader, m_ScheduleOtherReader;
std::set<__u8> seenPrivateSections;
void readPrivateData(const __u8 *data);
void startPrivateReader();
+ bool canDelete() { return !isRunning && !m_PrivateConn; }
+#else
+ bool canDelete() { return !isRunning; }
#endif
void readData(const __u8 *data);
void startChannel();