summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY1
-rw-r--r--dvbdevice.c4
-rw-r--r--dvbplayer.c4
-rw-r--r--thread.c4
-rw-r--r--thread.h4
5 files changed, 10 insertions, 7 deletions
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.