From 7d84ddefb3fc3c1dab66864b114fdd85af18cd4e Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 1 Jan 2006 14:46:24 +0100 Subject: [PATCH] Made the static cControl functions thread safe --- CONTRIBUTORS | 1 + HISTORY | 1 + player.c | 7 ++++++- player.h | 3 ++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 48c95d8b..c1977138 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1554,6 +1554,7 @@ Nicolas Huillard Patrick Fischer for reporting an error in the cFilter example in PLUGINS.html + for making the static cControl functions thread safe Ralf Müller for a patch that was used to implement cUnbufferedFile diff --git a/HISTORY b/HISTORY index b96f9b93..6b9e43fb 100644 --- a/HISTORY +++ b/HISTORY @@ -4057,3 +4057,4 @@ Video Disk Recorder Revision History Jürgen Schneider). - Removed unused variables in skinclassic.c and skinsttng.c (thanks to Marco Schlüßler). +- Made the static cControl functions thread safe (thanks to Patrick Fischer). diff --git a/player.c b/player.c index 80e384fa..74b19362 100644 --- a/player.c +++ b/player.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: player.c 1.9 2004/12/12 11:21:07 kls Exp $ + * $Id: player.c 1.10 2006/01/01 14:45:36 kls Exp $ */ #include "player.h" @@ -40,6 +40,7 @@ void cPlayer::Detach(void) // --- cControl -------------------------------------------------------------- cControl *cControl::control = NULL; +cMutex cControl::mutex; cControl::cControl(cPlayer *Player, bool Hidden) { @@ -56,17 +57,20 @@ cControl::~cControl() cControl *cControl::Control(void) { + cMutexLock MutexLock(&mutex); return (control && !control->hidden) ? control : NULL; } void cControl::Launch(cControl *Control) { + cMutexLock MutexLock(&mutex); delete control; control = Control; } void cControl::Attach(void) { + cMutexLock MutexLock(&mutex); if (control && !control->attached && control->player && !control->player->IsAttached()) { if (cDevice::PrimaryDevice()->AttachPlayer(control->player)) control->attached = true; @@ -79,6 +83,7 @@ void cControl::Attach(void) void cControl::Shutdown(void) { + cMutexLock MutexLock(&mutex); cControl *c = control; // avoids recursions control = NULL; delete c; diff --git a/player.h b/player.h index 4316a753..8134d117 100644 --- a/player.h +++ b/player.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: player.h 1.17 2005/05/22 11:07:42 kls Exp $ + * $Id: player.h 1.18 2006/01/01 14:43:10 kls Exp $ */ #ifndef __PLAYER_H @@ -62,6 +62,7 @@ public: class cControl : public cOsdObject { private: static cControl *control; + static cMutex mutex; bool attached; bool hidden; protected: