summaryrefslogtreecommitdiff
path: root/dvbplayer.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2015-09-01 11:14:27 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2015-09-01 11:14:27 +0200
commit3cd5294d8a337ee5cd2ec894c9fbe04ad3a7690d (patch)
treeda57ce74189de9bfb27e1a747063c37cd62de501 /dvbplayer.c
parent8a7bc6a0bbf60cae8b6391a630880aad5cba3363 (diff)
downloadvdr-3cd5294d8a337ee5cd2ec894c9fbe04ad3a7690d.tar.gz
vdr-3cd5294d8a337ee5cd2ec894c9fbe04ad3a7690d.tar.bz2
Implemented strict locking of global lists
Diffstat (limited to 'dvbplayer.c')
-rw-r--r--dvbplayer.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/dvbplayer.c b/dvbplayer.c
index aae0507c..ca4007e3 100644
--- a/dvbplayer.c
+++ b/dvbplayer.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbplayer.c 3.6 2015/02/13 15:12:57 kls Exp $
+ * $Id: dvbplayer.c 4.1 2015/08/06 13:09:19 kls Exp $
*/
#include "dvbplayer.h"
@@ -210,7 +210,7 @@ private:
cNonBlockingFileReader *nonBlockingFileReader;
cRingBufferFrame *ringBuffer;
cPtsIndex ptsIndex;
- cMarks *marks;
+ const cMarks *marks;
cFileName *fileName;
cIndexFile *index;
cUnbufferedFile *replayFile;
@@ -239,7 +239,7 @@ protected:
public:
cDvbPlayer(const char *FileName, bool PauseLive);
virtual ~cDvbPlayer();
- void SetMarks(cMarks *Marks);
+ void SetMarks(const cMarks *Marks);
bool Active(void) { return cThread::Running(); }
void Pause(void);
void Play(void);
@@ -311,7 +311,7 @@ cDvbPlayer::~cDvbPlayer()
// don't delete marks here, we don't own them!
}
-void cDvbPlayer::SetMarks(cMarks *Marks)
+void cDvbPlayer::SetMarks(const cMarks *Marks)
{
marks = Marks;
}
@@ -383,10 +383,11 @@ bool cDvbPlayer::Save(void)
int Index = ptsIndex.FindIndex(DeviceGetSTC());
if (Index >= 0) {
if (Setup.SkipEdited && marks) {
- marks->Lock();
+ cStateKey StateKey;
+ marks->Lock(StateKey);
if (marks->First() && abs(Index - marks->First()->Position()) <= int(round(RESUMEBACKUP * framesPerSecond)))
Index = 0; // when stopping within RESUMEBACKUP seconds of the first mark the recording shall still be considered unviewed
- marks->Unlock();
+ StateKey.Remove();
}
Index -= int(round(RESUMEBACKUP * framesPerSecond));
if (Index > 0)
@@ -419,7 +420,8 @@ void cDvbPlayer::Action(void)
if (readIndex > 0)
isyslog("resuming replay at index %d (%s)", readIndex, *IndexToHMSF(readIndex, true, framesPerSecond));
else if (Setup.SkipEdited && marks) {
- marks->Lock();
+ cStateKey StateKey;
+ marks->Lock(StateKey);
if (marks->First() && index) {
int Index = marks->First()->Position();
uint16_t FileNumber;
@@ -429,7 +431,7 @@ void cDvbPlayer::Action(void)
readIndex = Index;
}
}
- marks->Unlock();
+ StateKey.Remove();
}
nonBlockingFileReader = new cNonBlockingFileReader;
@@ -500,8 +502,9 @@ void cDvbPlayer::Action(void)
if (index->Get(readIndex + 1, &FileNumber, &FileOffset, &readIndependent, &Length) && NextFile(FileNumber, FileOffset)) {
readIndex++;
if ((Setup.SkipEdited || Setup.PauseAtLastMark) && marks) {
- marks->Lock();
- cMark *m = marks->Get(readIndex);
+ cStateKey StateKey;
+ marks->Lock(StateKey);
+ const cMark *m = marks->Get(readIndex);
if (m && (m->Index() & 0x01) != 0) { // we're at an end mark
m = marks->GetNextBegin(m);
int Index = -1;
@@ -519,7 +522,7 @@ void cDvbPlayer::Action(void)
CutIn = true;
}
}
- marks->Unlock();
+ StateKey.Remove();
}
}
else
@@ -943,7 +946,7 @@ cDvbPlayerControl::~cDvbPlayerControl()
Stop();
}
-void cDvbPlayerControl::SetMarks(cMarks *Marks)
+void cDvbPlayerControl::SetMarks(const cMarks *Marks)
{
if (player)
player->SetMarks(Marks);