aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/dvb.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2009-07-19 17:58:47 +0200
committerghost <andreas.monzner@multimedia-labs.de>2009-07-19 17:59:21 +0200
commite7e5b70162a6e74d7ee293495635c79660e0f7a8 (patch)
tree32824311ae9988efb05954fa374cebf4d163e7e1 /lib/dvb/dvb.cpp
parent74841610956172ea38705602f38e853e9b710f76 (diff)
downloadenigma2-e7e5b70162a6e74d7ee293495635c79660e0f7a8.tar.gz
enigma2-e7e5b70162a6e74d7ee293495635c79660e0f7a8.zip
fixes for /dev/misc/pvr opening problems in some conditions
Diffstat (limited to 'lib/dvb/dvb.cpp')
-rw-r--r--lib/dvb/dvb.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp
index 6b027088..894287e8 100644
--- a/lib/dvb/dvb.cpp
+++ b/lib/dvb/dvb.cpp
@@ -1124,6 +1124,7 @@ eDVBChannel::eDVBChannel(eDVBResourceManager *mgr, eDVBAllocatedFrontend *fronte
m_frontend = frontend;
m_pvr_thread = 0;
+ m_pvr_fd_dst = -1;
m_skipmode_n = m_skipmode_m = m_skipmode_frames = 0;
@@ -1750,16 +1751,19 @@ RESULT eDVBChannel::playFile(const char *file)
/* DON'T EVEN THINK ABOUT FIXING THIS. FIX THE ATI SOURCES FIRST,
THEN DO A REAL FIX HERE! */
+ if (m_pvr_fd_dst < 0)
+ {
/* (this codepath needs to be improved anyway.) */
#if HAVE_DVB_API_VERSION < 3
- m_pvr_fd_dst = open("/dev/pvr", O_WRONLY);
+ m_pvr_fd_dst = open("/dev/pvr", O_WRONLY);
#else
- m_pvr_fd_dst = open("/dev/misc/pvr", O_WRONLY);
+ m_pvr_fd_dst = open("/dev/misc/pvr", O_WRONLY);
#endif
- if (m_pvr_fd_dst < 0)
- {
- eDebug("can't open /dev/misc/pvr - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved.
- return -ENODEV;
+ if (m_pvr_fd_dst < 0)
+ {
+ eDebug("can't open /dev/misc/pvr - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved.
+ return -ENODEV;
+ }
}
m_pvr_thread = new eDVBChannelFilePush();
@@ -1771,6 +1775,8 @@ RESULT eDVBChannel::playFile(const char *file)
{
delete m_pvr_thread;
m_pvr_thread = 0;
+ ::close(m_pvr_fd_dst);
+ m_pvr_fd_dst = -1;
eDebug("can't open PVR file %s (%m)", file);
return -ENOENT;
}
@@ -1787,10 +1793,11 @@ void eDVBChannel::stopFile()
if (m_pvr_thread)
{
m_pvr_thread->stop();
- ::close(m_pvr_fd_dst);
delete m_pvr_thread;
m_pvr_thread = 0;
}
+ if (m_pvr_fd_dst >= 0)
+ ::close(m_pvr_fd_dst);
}
void eDVBChannel::setCueSheet(eCueSheet *cuesheet)