diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2010-11-02 16:58:09 +0100 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2010-11-02 16:58:09 +0100 |
| commit | a83125b3e0f7fcfcb06f19e2d1eb086ba792d227 (patch) | |
| tree | d94ff76e16873278e837f0919f85c9edf9a3b7d5 /lib/dvb/demux.cpp | |
| parent | 2c862a6323b51e446270ee3b6845ed234ed8771d (diff) | |
| download | enigma2-a83125b3e0f7fcfcb06f19e2d1eb086ba792d227.tar.gz enigma2-a83125b3e0f7fcfcb06f19e2d1eb086ba792d227.zip | |
fix frequently not working timeshift/record stop
this fixes bug #612
Diffstat (limited to 'lib/dvb/demux.cpp')
| -rw-r--r-- | lib/dvb/demux.cpp | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp index 081059b9..0c736c55 100644 --- a/lib/dvb/demux.cpp +++ b/lib/dvb/demux.cpp @@ -648,18 +648,36 @@ RESULT eDVBTSRecorder::setBoundary(off_t max) RESULT eDVBTSRecorder::stop() { + int state=3; + for (std::map<int,int>::iterator i(m_pids.begin()); i != m_pids.end(); ++i) stopPID(i->first); if (!m_running) return -1; + +#if HAVE_DVB_API_VERSION >= 5 + /* workaround for record thread stop */ + if (::ioctl(m_source_fd, DMX_STOP) < 0) + perror("DMX_STOP"); + else + state &= ~1; + + if (::close(m_source_fd) < 0) + perror("close"); + else + state &= ~2; +#endif + m_thread->stop(); - - close(m_source_fd); + + if (state & 3) + ::close(m_source_fd); + + m_running = 0; m_source_fd = -1; - + m_thread->stopSaveMetaInformation(); - return 0; } |
