git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- add eUsePtr for eDVBChannels
[enigma2.git]
/
lib
/
dvb
/
dvb.cpp
diff --git
a/lib/dvb/dvb.cpp
b/lib/dvb/dvb.cpp
index f1f5580a6fe67510c008344fcb0cd7ed87448ca2..35849b4cfc4aff955429f8ee3d4e644f3ac75376 100644
(file)
--- 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, e
Use
Ptr<iDVBChannel> &channel)
{
/* first, check if a channel is already existing. */
{
/* first, check if a channel is already existing. */
@@
-289,7
+289,7
@@
RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, ePtr
return 0;
}
return 0;
}
-RESULT eDVBResourceManager::allocateRawChannel(ePtr<iDVBChannel> &channel)
+RESULT eDVBResourceManager::allocateRawChannel(e
Use
Ptr<iDVBChannel> &channel)
{
ePtr<eDVBAllocatedFrontend> fe;
{
ePtr<eDVBAllocatedFrontend> fe;
@@
-383,6
+383,11
@@
void eDVBChannel::frontendStateChanged(iDVBFrontend*fe)
{
eDebug("fe state changed!");
int state, ourstate = 0;
{
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;
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)
RESULT eDVBChannel::setChannel(const eDVBChannelID &channelid)
{
if (m_channel_id)