fix cached channel handling
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 3 Feb 2006 23:05:05 +0000 (23:05 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 3 Feb 2006 23:05:05 +0000 (23:05 +0000)
lib/dvb/dvb.cpp
lib/dvb/dvb.h

index 8f4022ecbcde00066ce1017d597cc22a2b428c6a..f246936588842d5c957390a86c599931717488e9 100644 (file)
@@ -310,6 +310,7 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUse
                        channel = m_cached_channel;
                        return 0;
                }
+               m_cached_channel_state_changed_conn.disconnect();
                m_cached_channel=0;
        }
 
@@ -358,7 +359,8 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUse
                return errChidNotFound;
        }
        m_cached_channel = channel = ch;
-       CONNECT(ch->m_stateChanged,eDVBResourceManager::DVBChannelStateChanged);
+       m_cached_channel_state_changed_conn =
+               CONNECT(ch->m_stateChanged,eDVBResourceManager::DVBChannelStateChanged);
 
        return 0;
 }
@@ -390,6 +392,7 @@ void eDVBResourceManager::DVBChannelStateChanged(iDVBChannel *chan)
 void eDVBResourceManager::releaseCachedChannel()
 {
        eDebug("release cached channel");
+       m_cached_channel_state_changed_conn.disconnect();
        m_cached_channel=0;
 }
 
@@ -398,7 +401,10 @@ RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel, in
        ePtr<eDVBAllocatedFrontend> fe;
 
        if (m_cached_channel)
+       {
+               m_cached_channel_state_changed_conn.disconnect();
                m_cached_channel=0;
+       }
 
        if (allocateFrontendByIndex(fe, frontend_index))
                return errNoFrontend;
@@ -416,7 +422,10 @@ RESULT eDVBResourceManager::allocatePVRChannel(eUsePtr<iDVBPVRChannel> &channel)
        ePtr<eDVBAllocatedDemux> demux;
 
        if (m_cached_channel)
+       {
+               m_cached_channel_state_changed_conn.disconnect();
                m_cached_channel=0;
+       }
 
        eDVBChannel *ch;
        ch = new eDVBChannel(this, 0);
index 15e27536cef9f10d1be3e30e06a72b37144d68e9..8b0a3595fd7545d2d1eddb6e213cccaff9383b73 100644 (file)
@@ -167,6 +167,7 @@ class eDVBResourceManager: public iObject, public Object
        bool canAllocateFrontend(ePtr<iDVBFrontendParameters> &feparm);
 
        eUsePtr<iDVBChannel> m_cached_channel;
+       Connection m_cached_channel_state_changed_conn;
        eTimer m_releaseCachedChannelTimer;
        void DVBChannelStateChanged(iDVBChannel*);
        void releaseCachedChannel();