diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 00f79ee8..20c8eb68 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2835,6 +2835,8 @@ Johann Friedrichs respective recording did not exist for fixing a double deletion of a cTimer in case HandleRemoteModifications() returned false + for reporting an invalid lock sequence in the epgsearch plugin, which turned out to + be an abandoned member of class cSchedulesLock Timo Helkio for reporting a hangup when replaying a TS recording with subtitles activated diff --git a/HISTORY b/HISTORY index 462cb247..150ae394 100644 --- a/HISTORY +++ b/HISTORY @@ -9103,7 +9103,7 @@ Video Disk Recorder Revision History - Fixed the locking sequence when switching between 'Now', 'Next' and 'Schedule' in the Schedules menu. -2017-06-10: Version 2.3.7 +2017-06-11: Version 2.3.7 - Fixed false positives when checking the locking sequence, in case of nested locks within the same thread. @@ -9121,3 +9121,8 @@ Video Disk Recorder Revision History Martin Wache). - The "Channels" menu now indicates whether a channel is encrypted ('X') or a radio channel ('R') (thanks to Martin Wache). +- Changed ##Lock to ##_Lock in the DEF_LIST_LOCK and USE_LIST_LOCK macros defined + in tools.h, so that there is no cSchedulesLock any more. The epgsearch plugin still + had an abandoned member of class cSchedulesLock, which, as a side effect, caused an + invalid lock sequence to be flagged (reported by Johann Friedrichs). In order to + have the compiler report such things, these macros have been changed. diff --git a/tools.h b/tools.h index 6ff70318..cc4b2b66 100644 --- a/tools.h +++ b/tools.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.h 4.10 2017/05/22 20:21:08 kls Exp $ + * $Id: tools.h 4.11 2017/06/11 08:52:06 kls Exp $ */ #ifndef __TOOLS_H @@ -614,19 +614,19 @@ public: // is left: #define DEF_LIST_LOCK2(Class, Name) \ -class c##Name##Lock { \ +class c##Name##_Lock { \ private: \ cStateKey stateKey; \ const c##Class *list; \ public: \ - c##Name##Lock(bool Write = false) \ + c##Name##_Lock(bool Write = false) \ { \ if (Write) \ list = c##Class::Get##Name##Write(stateKey); \ else \ list = c##Class::Get##Name##Read(stateKey); \ } \ - ~c##Name##Lock() { if (list) stateKey.Remove(); } \ + ~c##Name##_Lock() { if (list) stateKey.Remove(); } \ const c##Class *Name(void) const { return list; } \ c##Class *Name(void) { return const_cast(list); } \ } @@ -636,13 +636,13 @@ public: \ // a suitable DEF_LIST_LOCK, and also a pointer to the provided list: #define USE_LIST_LOCK_READ2(Class, Name) \ -c##Name##Lock Name##Lock(false); \ -const c##Class *Name __attribute__((unused)) = Name##Lock.Name(); +c##Name##_Lock Name##_Lock(false); \ +const c##Class *Name __attribute__((unused)) = Name##_Lock.Name(); #define USE_LIST_LOCK_READ(Class) USE_LIST_LOCK_READ2(Class, Class) #define USE_LIST_LOCK_WRITE2(Class, Name) \ -c##Name##Lock Name##Lock(true); \ -c##Class *Name __attribute__((unused)) = Name##Lock.Name(); +c##Name##_Lock Name##_Lock(true); \ +c##Class *Name __attribute__((unused)) = Name##_Lock.Name(); #define USE_LIST_LOCK_WRITE(Class) USE_LIST_LOCK_WRITE2(Class, Class) template class cVector {