diff --git a/HISTORY b/HISTORY index bbc10dd6..2e3ff1fd 100644 --- a/HISTORY +++ b/HISTORY @@ -3298,3 +3298,4 @@ Video Disk Recorder Revision History for "Setup/DVB/Audio language(s)" (thanks to Rolf Ahrenberg). - Completed the Estonian OSD texts and switched to iso8859-13 character set (thanks to Arthur Konovalov). +- Made cCondWait::SleepMs() sleep at least 3ms to avoid a possible busy wait. diff --git a/dvbdevice.c b/dvbdevice.c index 9c7fd381..d497aaff 100644 --- a/dvbdevice.c +++ b/dvbdevice.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.c 1.113 2005/01/09 13:04:20 kls Exp $ + * $Id: dvbdevice.c 1.114 2005/01/14 14:00:44 kls Exp $ */ #include "dvbdevice.h" @@ -1111,7 +1111,7 @@ void cDvbDevice::StillPicture(const uchar *Data, int Length) #define MIN_IFRAME 400000 for (int i = MIN_IFRAME / Length + 1; i > 0; i--) { safe_write(fd_video, Data, Length); - cCondWait::SleepMs(1); // allows the buffer to be displayed in case the progress display is active + cCondWait::SleepMs(3); // allows the buffer to be displayed in case the progress display is active } #endif } diff --git a/dvbplayer.c b/dvbplayer.c index 0ec06810..8605268b 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.29 2004/12/26 11:45:34 kls Exp $ + * $Id: dvbplayer.c 1.30 2005/01/14 14:00:56 kls Exp $ */ #include "dvbplayer.h" @@ -439,7 +439,7 @@ void cDvbPlayer::Action(void) } } else - cCondWait::SleepMs(1); // this keeps the CPU load low + cCondWait::SleepMs(3); // this keeps the CPU load low } // Store the frame in the buffer: diff --git a/thread.c b/thread.c index fe3359bf..eb009f14 100644 --- a/thread.c +++ b/thread.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: thread.c 1.40 2004/12/19 10:43:14 kls Exp $ + * $Id: thread.c 1.41 2005/01/14 13:59:48 kls Exp $ */ #include "thread.h" @@ -36,7 +36,7 @@ cCondWait::~cCondWait() void cCondWait::SleepMs(int TimeoutMs) { cCondWait w; - w.Wait(TimeoutMs); + w.Wait(max(TimeoutMs, 3)); // making sure the time is >2ms to avoid a possible busy wait } bool cCondWait::Wait(int TimeoutMs) diff --git a/thread.h b/thread.h index 6e096a64..2c0ebcba 100644 --- a/thread.h +++ b/thread.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: thread.h 1.26 2004/12/19 10:43:10 kls Exp $ + * $Id: thread.h 1.27 2005/01/14 14:02:14 kls Exp $ */ #ifndef __THREAD_H @@ -26,6 +26,8 @@ public: ///< Creates a cCondWait object and uses it to sleep for TimeoutMs ///< milliseconds, immediately giving up the calling thread's time ///< slice and thus avoiding a "busy wait". + ///< In order to avoid a possible busy wait, TimeoutMs will be automatically + ///< limited to values >2. bool Wait(int TimeoutMs = 0); ///< Waits at most TimeoutMs milliseconds for a call to Signal(), or ///< forever if TimeoutMs is 0.