aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/dvb/dvb.h4
-rw-r--r--lib/dvb/frontend.cpp5
-rw-r--r--lib/dvb/frontend.h2
3 files changed, 6 insertions, 5 deletions
diff --git a/lib/dvb/dvb.h b/lib/dvb/dvb.h
index 71c6a6c1..a7be0a71 100644
--- a/lib/dvb/dvb.h
+++ b/lib/dvb/dvb.h
@@ -21,8 +21,8 @@ class eDVBRegisteredFrontend: public iObject, public Object
eTimer *disable;
void closeFrontend()
{
- if (!m_inuse)
- m_frontend->closeFrontend();
+ if (!m_inuse && m_frontend->closeFrontend()) // frontend busy
+ disable->start(60000, true); // retry close in 60secs
}
public:
eDVBRegisteredFrontend(eDVBFrontend *fe, iDVBAdapter *adap)
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
index 1cafcec4..a3483904 100644
--- a/lib/dvb/frontend.cpp
+++ b/lib/dvb/frontend.cpp
@@ -313,7 +313,7 @@ int eDVBFrontend::openFrontend()
return 0;
}
-void eDVBFrontend::closeFrontend()
+int eDVBFrontend::closeFrontend()
{
if (!m_fe && m_data[7] != -1)
{
@@ -323,7 +323,7 @@ void eDVBFrontend::closeFrontend()
{
eDebug("dont close frontend %d until the linked frontend %d is still in use",
m_fe, linked_fe->m_frontend->getID());
- return;
+ return -1;
}
}
eDebug("close frontend %d", m_fe);
@@ -344,6 +344,7 @@ void eDVBFrontend::closeFrontend()
setTone(iDVBFrontend::toneOff);
setVoltage(iDVBFrontend::voltageOff);
+ return 0;
}
eDVBFrontend::~eDVBFrontend()
diff --git a/lib/dvb/frontend.h b/lib/dvb/frontend.h
index 7862e2ea..c702970b 100644
--- a/lib/dvb/frontend.h
+++ b/lib/dvb/frontend.h
@@ -100,7 +100,7 @@ public:
int getID() { return m_fe; }
int openFrontend();
- void closeFrontend();
+ int closeFrontend();
};
#endif