From 7f5f26020bcedd5a1fd1ae73b8dcebafe2fb9b39 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 8 May 2005 14:06:21 +0200 Subject: [PATCH] Some rearrangements in cDvbPlayer::Action() to avoid lockups on NPTL systems --- CONTRIBUTORS | 1 + HISTORY | 4 +++- dvbplayer.c | 20 ++++++++++---------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 14cf178d..a2149099 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -942,6 +942,7 @@ Reinhard Nissl function permanently returns 0 for fixing a typo in detecting UTF-8 for fixing handling fragments of less than 3 byte in cPesAssembler + for some rearrangements in cDvbPlayer::Action() to avoid lockups on NPTL systems Richard Robson for reporting freezing replay if a timer starts while in Transfer Mode from the diff --git a/HISTORY b/HISTORY index 4d78bb69..625a9c21 100644 --- a/HISTORY +++ b/HISTORY @@ -3474,7 +3474,7 @@ Video Disk Recorder Revision History - Added a missing cMutexLock to cRemote::HasKeys() (thanks to Wolfgang Rohdewald). - All log entries regarding timers now contain a short description of the timer. -2005-05-07: Version 1.3.24 +2005-05-08: Version 1.3.24 - Now including the optional user defined Make.config from the 'libsi' Makefile (thanks to Ville Skyttä). @@ -3508,3 +3508,5 @@ Video Disk Recorder Revision History audio or dolby PID changes. - Now preferring budget cards when selecting a DVB device for recording. - Recordings now avoid zero sized video data files (thanks to Wolfgang Fitz). +- Some rearrangements in cDvbPlayer::Action() to avoid lockups on NPTL systems + (thanks to Reinhard Nissl). diff --git a/dvbplayer.c b/dvbplayer.c index ad5ccf2d..5d2370cb 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 1.31 2005/05/05 12:52:40 kls Exp $ + * $Id: dvbplayer.c 1.32 2005/05/08 13:51:00 kls Exp $ */ #include "dvbplayer.h" @@ -382,8 +382,8 @@ void cDvbPlayer::Action(void) // Read the next frame from the file: - if (!readFrame && (replayFile >= 0 || readIndex >= 0)) { - if (playMode != pmStill) { + if (playMode != pmStill && playMode != pmPause) { + if (!readFrame && (replayFile >= 0 || readIndex >= 0)) { if (!nonBlockingFileReader->Reading()) { if (playMode == pmFast || (playMode == pmSlow && playDir == pdBackward)) { uchar FileNumber; @@ -440,16 +440,16 @@ void cDvbPlayer::Action(void) break; } } - else - cCondWait::SleepMs(3); // this keeps the CPU load low - } - // Store the frame in the buffer: + // Store the frame in the buffer: - if (readFrame) { - if (ringBuffer->Put(readFrame)) - readFrame = NULL; + if (readFrame) { + if (ringBuffer->Put(readFrame)) + readFrame = NULL; + } } + else + cCondWait::SleepMs(3); // this keeps the CPU load low // Get the next frame from the buffer: