remove unneeded signals ( eDVBChannel::m_stateChanged give us the same informations )
[enigma2.git] / lib / dvb / dvb.cpp
index f1f5580a6fe67510c008344fcb0cd7ed87448ca2..ea51d6a194f31ac912bf00f6fc8c944f7f9baf7d 100644 (file)
@@ -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;
        
@@ -334,7 +334,6 @@ RESULT eDVBResourceManager::removeChannel(eDVBChannel *ch)
                {
                        i = m_active_channels.erase(i);
                        ++cnt;
-                       /* emit */ m_channelRemoved(ch);
                } else
                        ++i;
        }
@@ -350,18 +349,6 @@ RESULT eDVBResourceManager::connectChannelAdded(const Slot1<void,eDVBChannel*> &
        return 0;
 }
 
-RESULT eDVBResourceManager::connectChannelRemoved(const Slot1<void,eDVBChannel*> &channelRemoved, ePtr<eConnection> &connection)
-{
-       connection = new eConnection((eDVBResourceManager*)this, m_channelRemoved.connect(channelRemoved));
-       return 0;
-}
-
-RESULT eDVBResourceManager::connectChannelRunning(const Slot1<void,iDVBChannel*> &channelRunning, ePtr<eConnection> &connection)
-{
-       connection = new eConnection((eDVBResourceManager*)this, m_channelRunning.connect(channelRunning));
-       return 0;
-}
-
 DEFINE_REF(eDVBChannel);
 
 eDVBChannel::eDVBChannel(eDVBResourceManager *mgr, eDVBAllocatedFrontend *frontend, eDVBAllocatedDemux *demux): m_state(state_idle), m_mgr(mgr)
@@ -383,6 +370,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 +400,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)