diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 0db5f2ab..a2eeaed2 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -3397,6 +3397,7 @@ Dietmar Spingler for suggesting to cache the channel/CAM relations in the file 'cam.data' for suggesting to optionally list the channels with channel ids in the SVDRP command LSTC for suggesting to include the channel ID in log messages about switching channels + for reporting a problem with the SVDRP command CHAN while the channel display is open Stefan Schallenberg for adding the functions IndexOf(), InsertUnique(), AppendUnique() and RemoveElement() diff --git a/HISTORY b/HISTORY index 76d3ee1c..2e19fed4 100644 --- a/HISTORY +++ b/HISTORY @@ -8991,7 +8991,7 @@ Video Disk Recorder Revision History current channel is listed. - Fixed a possible crash when pulling the CAM while decrypting a channel with MTD. -2017-05-17: Version 2.3.5 +2017-05-18: Version 2.3.5 - CAMs are now sent a generated EIT packet that contains a single 'present event' for the current SID, in order to avoid any parental rating dialogs. @@ -9026,3 +9026,5 @@ Video Disk Recorder Revision History presence is required by some CAMs). - Fixed a crash in case the bottom text of a CAM menu is empty. - Extended the CI API to allow plugins to implement additional CAM resources. +- Fixed a race between SVDRP CHAN and cDevice::HasProgramme() (reported by Dietmar + Spingler). diff --git a/device.c b/device.c index a090afb1..b957658e 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.20 2017/05/18 09:05:46 kls Exp $ + * $Id: device.c 4.21 2017/05/18 09:16:41 kls Exp $ */ #include "device.h" @@ -834,6 +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() cStatus::MsgChannelSwitch(this, 0, LiveView); if (LiveView) { @@ -946,6 +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() return Replaying() || pidHandles[ptAudio].pid || pidHandles[ptVideo].pid; }