summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2017-05-30 11:06:55 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2017-05-30 11:06:55 +0200
commitf97a59597f53e2a207b624ab32f491131253987c (patch)
tree1447dc381514dd21c2143ce0fdeda40f1775c479
parent6edfcda43a365cfd94ed6649d66a0adcbb965480 (diff)
downloadvdr-f97a59597f53e2a207b624ab32f491131253987c.tar.gz
vdr-f97a59597f53e2a207b624ab32f491131253987c.tar.bz2
Now using a separate mutex to fix the race between SVDRP CHAN and cDevice::HasProgramme()
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY3
-rw-r--r--device.c6
-rw-r--r--device.h3
4 files changed, 10 insertions, 4 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 7cdb554c..a3d593f3 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -2858,6 +2858,8 @@ Derek Kelly <user.vdr@gmail.com>
for suggesting to change the naming of "binary skip mode" to "adaptive skip mode"
for suggesting to make the -u option also accept a numerical user id
for reporting a problem with abs() in gcc6+ when called with an unsigned variable
+ for reporting a deadlock after the fix for a race between SVDRP CHAN and
+ cDevice::HasProgramme()
Marcel Unbehaun <frostworks@gmx.de>
for adding cRecordingInfo::GetEvent()
diff --git a/HISTORY b/HISTORY
index 8ea3ebfc..55c8909b 100644
--- a/HISTORY
+++ b/HISTORY
@@ -9084,3 +9084,6 @@ Video Disk Recorder Revision History
- Fixed generating k_Release key events for LIRC remote controls (due to the short
timeout another normal key was sometimes put into the queue after the generated
release). Also removed some code redundancy and added some buffer checks.
+- Now using a separate mutex to fix the race between SVDRP CHAN and
+ cDevice::HasProgramme(), because the previous fix caused a deadlock (reported by
+ Derek Kelly).
diff --git a/device.c b/device.c
index 7c1c74b1..3c676922 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c 4.22 2017/05/18 09:27:55 kls Exp $
+ * $Id: device.c 4.23 2017/05/30 11:06:11 kls Exp $
*/
#include "device.h"
@@ -834,7 +834,7 @@ bool cDevice::SwitchChannel(int Direction)
eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
{
- cMutexLock MutexLock(&mutexReceiver); // to avoid a race between SVDRP CHAN and HasProgramme()
+ cMutexLock MutexLock(&mutexChannel); // to avoid a race between SVDRP CHAN and HasProgramme()
cStatus::MsgChannelSwitch(this, 0, LiveView);
if (LiveView) {
@@ -947,7 +947,7 @@ bool cDevice::HasLock(int TimeoutMs) const
bool cDevice::HasProgramme(void) const
{
- cMutexLock MutexLock(&mutexReceiver); // to avoid a race between SVDRP CHAN and HasProgramme()
+ cMutexLock MutexLock(&mutexChannel); // to avoid a race between SVDRP CHAN and HasProgramme()
return Replaying() || pidHandles[ptAudio].pid || pidHandles[ptVideo].pid;
}
diff --git a/device.h b/device.h
index f6aee4e9..83e51782 100644
--- a/device.h
+++ b/device.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.h 4.9 2017/05/09 11:24:47 kls Exp $
+ * $Id: device.h 4.10 2017/05/30 11:06:11 kls Exp $
*/
#ifndef __DEVICE_H
@@ -257,6 +257,7 @@ public:
// Channel facilities
private:
+ mutable cMutex mutexChannel;
time_t occupiedTimeout;
protected:
static int currentChannel;