aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/epgcache.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-12-17 15:25:32 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-12-17 15:25:32 +0000
commit358845c0c1b60f79831ee81ccf55c7c5f5d771e3 (patch)
tree7045d2bc860d3da0835dbc09961733f4117f40c5 /lib/dvb/epgcache.cpp
parentde62aa9ce9d8b1ff8ffe12b334e68802c120e35b (diff)
downloadenigma2-358845c0c1b60f79831ee81ccf55c7c5f5d771e3.tar.gz
enigma2-358845c0c1b60f79831ee81ccf55c7c5f5d771e3.zip
fix channel state handling
Diffstat (limited to 'lib/dvb/epgcache.cpp')
-rw-r--r--lib/dvb/epgcache.cpp39
1 files changed, 23 insertions, 16 deletions
diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp
index 28718800..6d811194 100644
--- a/lib/dvb/epgcache.cpp
+++ b/lib/dvb/epgcache.cpp
@@ -191,6 +191,7 @@ void eEPGCache::DVBChannelAdded(eDVBChannel *chan)
// eDebug("[eEPGCache] add channel %p", chan);
channel_data *data = new channel_data(this);
data->channel = chan;
+ data->prevChannelState = -1;
singleLock s(channel_map_lock);
m_knownChannels.insert( std::pair<iDVBChannel*, channel_data* >(chan, data) );
chan->connectStateChange(slot(*this, &eEPGCache::DVBChannelStateChanged), data->m_stateChangedConn);
@@ -256,25 +257,31 @@ void eEPGCache::DVBChannelStateChanged(iDVBChannel *chan)
{
int state=0;
chan->getState(state);
- switch (state)
+ if ( it->second->prevChannelState != state )
{
- case iDVBChannel::state_ok:
+ switch (state)
{
- eDebug("[eEPGCache] channel %p running", chan);
- DVBChannelRunning(chan);
- break;
- }
- case iDVBChannel::state_release:
- {
- eDebug("[eEPGCache] remove channel %p", chan);
- messages.send(Message(Message::leaveChannel, chan));
- while(!it->second->can_delete)
- usleep(1000);
- delete it->second;
- m_knownChannels.erase(it);
- // -> gotMessage -> abortEPG
- break;
+ case iDVBChannel::state_ok:
+ {
+ eDebug("[eEPGCache] channel %p running", chan);
+ DVBChannelRunning(chan);
+ break;
+ }
+ case iDVBChannel::state_release:
+ {
+ eDebug("[eEPGCache] remove channel %p", chan);
+ messages.send(Message(Message::leaveChannel, chan));
+ while(!it->second->can_delete)
+ usleep(1000);
+ delete it->second;
+ m_knownChannels.erase(it);
+ // -> gotMessage -> abortEPG
+ break;
+ }
+ default: // ignore all other events
+ return;
}
+ it->second->prevChannelState = state;
}
}
}