diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 023aac1f..79fc76f0 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -984,6 +984,7 @@ Andreas Mair option ':groups' is given for fixing handling 3 and 4 byte UTF-8 symbols in Utf8CharGet() for fixing initializing the timer's flags in the cTimer copy constructor + for reporting a crash in case CutRecording() is called from a plugin Olivier Jacques ) for translating OSD texts to the French language diff --git a/HISTORY b/HISTORY index 87894ea6..b7a56676 100644 --- a/HISTORY +++ b/HISTORY @@ -6465,7 +6465,7 @@ Video Disk Recorder Revision History the number keys can be used to enter characters in a text input field (suggested by Stefan Huskamp). -2010-06-13: Version 1.7.16 +2010-08-29: Version 1.7.16 - Updated the Italian OSD texts (thanks to Diego Pierotto). - Added missing Dtypes for ATSC (thanks to Alex Lasnier). @@ -6474,3 +6474,5 @@ Video Disk Recorder Revision History - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). - Fixed the array size of Atypes in cPatFilter::Process() (thanks to Rolf Ahrenberg). +- Added locking to the cCutter functions to avoid a crash in case CutRecording() + is called from a plugin (reported by Andreas Mair). diff --git a/cutter.c b/cutter.c index ff6b4edb..c1f49849 100644 --- a/cutter.c +++ b/cutter.c @@ -4,13 +4,12 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: cutter.c 2.4 2010/01/02 13:08:08 kls Exp $ + * $Id: cutter.c 2.5 2010/08/29 13:35:18 kls Exp $ */ #include "cutter.h" #include "recording.h" #include "remux.h" -#include "thread.h" #include "videodir.h" // --- cCuttingThread -------------------------------------------------------- @@ -194,6 +193,7 @@ void cCuttingThread::Action(void) // --- cCutter --------------------------------------------------------------- +cMutex cCutter::mutex; char *cCutter::editedVersionName = NULL; cCuttingThread *cCutter::cuttingThread = NULL; bool cCutter::error = false; @@ -201,6 +201,7 @@ bool cCutter::ended = false; bool cCutter::Start(const char *FileName) { + cMutexLock MutexLock(&mutex); if (!cuttingThread) { error = false; ended = false; @@ -231,6 +232,7 @@ bool cCutter::Start(const char *FileName) void cCutter::Stop(void) { + cMutexLock MutexLock(&mutex); bool Interrupted = cuttingThread && cuttingThread->Active(); const char *Error = cuttingThread ? cuttingThread->Error() : NULL; delete cuttingThread; @@ -247,6 +249,7 @@ void cCutter::Stop(void) bool cCutter::Active(void) { + cMutexLock MutexLock(&mutex); if (cuttingThread) { if (cuttingThread->Active()) return true; @@ -263,6 +266,7 @@ bool cCutter::Active(void) bool cCutter::Error(void) { + cMutexLock MutexLock(&mutex); bool result = error; error = false; return result; @@ -270,6 +274,7 @@ bool cCutter::Error(void) bool cCutter::Ended(void) { + cMutexLock MutexLock(&mutex); bool result = ended; ended = false; return result; diff --git a/cutter.h b/cutter.h index afc5e935..59c44008 100644 --- a/cutter.h +++ b/cutter.h @@ -4,16 +4,19 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: cutter.h 2.1 2010/01/02 12:09:54 kls Exp $ + * $Id: cutter.h 2.2 2010/08/29 13:32:33 kls Exp $ */ #ifndef __CUTTER_H #define __CUTTER_H +#include "thread.h" + class cCuttingThread; class cCutter { private: + static cMutex mutex; static char *editedVersionName; static cCuttingThread *cuttingThread; static bool error;