diff options
Diffstat (limited to 'lib/dvb/dvb.cpp')
| -rw-r--r-- | lib/dvb/dvb.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index f1f5580a..35849b4c 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -240,7 +240,7 @@ RESULT eDVBResourceManager::getChannelList(ePtr<iDVBChannelList> &list) } -RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, ePtr<iDVBChannel> &channel) +RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUsePtr<iDVBChannel> &channel) { /* first, check if a channel is already existing. */ @@ -289,7 +289,7 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, ePtr return 0; } -RESULT eDVBResourceManager::allocateRawChannel(ePtr<iDVBChannel> &channel) +RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel) { ePtr<eDVBAllocatedFrontend> fe; @@ -383,6 +383,11 @@ void eDVBChannel::frontendStateChanged(iDVBFrontend*fe) { eDebug("fe state changed!"); int state, ourstate = 0; + + /* if we are already in shutdown, don't change state. */ + if (m_state == state_release) + return; + if (fe->getState(state)) return; @@ -408,6 +413,20 @@ void eDVBChannel::frontendStateChanged(iDVBFrontend*fe) } } +void eDVBChannel::AddUse() +{ + ++m_use_count; +} + +void eDVBChannel::ReleaseUse() +{ + if (!--m_use_count) + { + m_state = state_release; + m_stateChanged(this); + } +} + RESULT eDVBChannel::setChannel(const eDVBChannelID &channelid) { if (m_channel_id) |
