summaryrefslogtreecommitdiff
path: root/recording.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2017-01-01 17:52:51 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2017-01-01 17:52:51 +0100
commit1c7c2f50b0c5c2798142c55c32294cf5458d98bd (patch)
tree4f8c3f9156f0f92ccc239e0058081040793d21cd /recording.c
parentf345908f779aa5b64b7f052f416babe55241a46f (diff)
downloadvdr-1c7c2f50b0c5c2798142c55c32294cf5458d98bd.tar.gz
vdr-1c7c2f50b0c5c2798142c55c32294cf5458d98bd.tar.bz2
Fixed a possible deadlock in the recordings handler thread
Diffstat (limited to 'recording.c')
-rw-r--r--recording.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/recording.c b/recording.c
index 5293459e..63980585 100644
--- a/recording.c
+++ b/recording.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recording.c 4.6 2016/12/22 12:58:20 kls Exp $
+ * $Id: recording.c 4.7 2017/01/01 17:52:51 kls Exp $
*/
#include "recording.h"
@@ -1914,16 +1914,20 @@ cRecordingsHandler::~cRecordingsHandler()
void cRecordingsHandler::Action(void)
{
while (Running()) {
+ bool Sleep = false;
{
cMutexLock MutexLock(&mutex);
- while (cRecordingsHandlerEntry *r = operations.First()) {
- if (!r->Active(error))
- operations.Del(r);
- }
- if (!operations.Count())
+ if (cRecordingsHandlerEntry *r = operations.First()) {
+ if (!r->Active(error))
+ operations.Del(r);
+ else
+ Sleep = true;
+ }
+ else
break;
}
- cCondWait::SleepMs(100);
+ if (Sleep)
+ cCondWait::SleepMs(100);
}
}