}
-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. */
return 0;
}
-RESULT eDVBResourceManager::allocateRawChannel(ePtr<iDVBChannel> &channel)
+RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel)
{
ePtr<eDVBAllocatedFrontend> fe;
{
i = m_active_channels.erase(i);
++cnt;
- /* emit */ m_channelRemoved(ch);
} else
++i;
}
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)
{
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;
}
}
+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)