From e39c12fcbf218f0964782a48d6e66145e1ce5039 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 12 Jul 2005 14:00:01 +0000 Subject: - add eUsePtr for eDVBChannels --- lib/dvb/dvb.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'lib/dvb/dvb.cpp') 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 &list) } -RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, ePtr &channel) +RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUsePtr &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 &channel) +RESULT eDVBResourceManager::allocateRawChannel(eUsePtr &channel) { ePtr 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) -- cgit v1.2.3