From bb4b6901ad4726217d0af4019d03078e51ec93a4 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Mon, 5 Mar 2018 22:40:12 +0100 Subject: Fixed removing a cStateKey from a cStateLock --- HISTORY | 2 ++ thread.c | 7 +++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/HISTORY b/HISTORY index d009dae6..babf8135 100644 --- a/HISTORY +++ b/HISTORY @@ -9298,3 +9298,5 @@ Video Disk Recorder Revision History - Assigning events to timers no longer triggers sending a POLL to all peer VDRs. - When making modifications to remote timers, the local VDR no longer sends a POLL to all remote VDRs. +- Fixed removing a cStateKey from a cStateLock (setting StateKey.stateLock = NULL was + done too late, after the lock had already been released). diff --git a/thread.c b/thread.c index 0bc12226..2a5a8e99 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 4.13 2018/03/04 13:17:04 kls Exp $ + * $Id: thread.c 4.14 2018/03/05 22:38:10 kls Exp $ */ #include "thread.h" @@ -775,6 +775,7 @@ void cStateLock::Unlock(cStateKey &StateKey, bool IncState) state++; } StateKey.state = state; + StateKey.stateLock = NULL; if (StateKey.write) { StateKey.write = false; threadId = 0; @@ -857,10 +858,8 @@ void cStateKey::Reset(void) void cStateKey::Remove(bool IncState) { - if (stateLock) { + if (stateLock) stateLock->Unlock(*this, IncState); - stateLock = NULL; - } else { esyslog("ERROR: cStateKey::Remove() called without holding a lock (key=%p)", this); ABORT; -- cgit v1.2.3