diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2018-03-05 22:40:12 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2018-03-05 22:40:12 +0100 |
commit | bb4b6901ad4726217d0af4019d03078e51ec93a4 (patch) | |
tree | dd241552f4f2c32b37452ca97a4d35071fbd7e7a | |
parent | a7fdd3c1658eea61f678cd273e48fff219d28dd3 (diff) | |
download | vdr-bb4b6901ad4726217d0af4019d03078e51ec93a4.tar.gz vdr-bb4b6901ad4726217d0af4019d03078e51ec93a4.tar.bz2 |
Fixed removing a cStateKey from a cStateLock
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | thread.c | 7 |
2 files changed, 5 insertions, 4 deletions
@@ -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). @@ -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; |