aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/tstools.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2009-12-17 14:58:54 +0100
committerghost <andreas.monzner@multimedia-labs.de>2009-12-17 15:23:07 +0100
commitbce2ef4220fecb2c2e296c85ec2fbef5794f4492 (patch)
treec96dea4b4a9d2e239e0d048fa531cf14cba907b4 /lib/dvb/tstools.cpp
parent8b4017d003a6d7ed074212a8f335707080eace6a (diff)
downloadenigma2-bce2ef4220fecb2c2e296c85ec2fbef5794f4492.tar.gz
enigma2-bce2ef4220fecb2c2e296c85ec2fbef5794f4492.zip
lib/dvb/tstools.h/cpp: make eDVBTSTool thread safe (i.e. this fixes seeking in timeshift and seeking in files without additional startcode/accespoint file
Diffstat (limited to 'lib/dvb/tstools.cpp')
-rw-r--r--lib/dvb/tstools.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp
index 2e5c5665..dafd70fe 100644
--- a/lib/dvb/tstools.cpp
+++ b/lib/dvb/tstools.cpp
@@ -7,6 +7,7 @@
#include <stdio.h>
eDVBTSTools::eDVBTSTools()
+ :m_file_lock(true)
{
m_pid = -1;
m_maxrange = 256*1024;
@@ -47,6 +48,7 @@ int eDVBTSTools::openFile(const char *filename, int nostreaminfo)
m_samples_taken = 0;
+ eSingleLocker l(m_file_lock);
if (m_file.open(filename, 1) < 0)
return -1;
return 0;
@@ -54,6 +56,7 @@ int eDVBTSTools::openFile(const char *filename, int nostreaminfo)
void eDVBTSTools::closeFile()
{
+ eSingleLocker l(m_file_lock);
m_file.close();
}
@@ -78,7 +81,8 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed)
return -1;
offset -= offset % 188;
-
+
+ eSingleLocker l(m_file_lock);
if (m_file.lseek(offset, SEEK_SET) < 0)
{
eDebug("lseek failed");
@@ -355,7 +359,8 @@ void eDVBTSTools::calcEnd()
{
if (!m_file.valid())
return;
-
+
+ eSingleLocker l(m_file_lock);
off_t end = m_file.lseek(0, SEEK_END);
if (llabs(end - m_last_filelength) > 1*1024*1024)
@@ -504,6 +509,7 @@ int eDVBTSTools::findPMT(int &pmt_pid, int &service_id)
return -1;
}
+ eSingleLocker l(m_file_lock);
if (m_file.lseek(0, SEEK_SET) < 0)
{
eDebug("seek failed");