From 0a9f914076a8143c6b4f9e595e42be3b5c778dd1 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Wed, 21 Mar 2001 01:02:35 +0000 Subject: [PATCH] added epicsAutoMutexRelease --- src/libCom/osi/epicsMutex.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/libCom/osi/epicsMutex.h b/src/libCom/osi/epicsMutex.h index ef34083a0..12c032acb 100644 --- a/src/libCom/osi/epicsMutex.h +++ b/src/libCom/osi/epicsMutex.h @@ -41,6 +41,19 @@ private: epicsMutex & rMutex; }; +// Automatically releases and reapplies the mutex. +// This is for use in situations where C++ exceptions are possible. +class epicsAutoMutexRelease { +public: + epicsAutoMutexRelease ( epicsMutex & ); + ~epicsAutoMutexRelease (); +private: + epicsAutoMutexRelease ( const epicsAutoMutex & ); + epicsAutoMutexRelease & operator = ( const epicsAutoMutex & ); + epicsMutex & rMutex; +}; + + #endif /*__cplusplus*/ #ifdef __cplusplus @@ -147,6 +160,17 @@ inline epicsAutoMutex :: ~epicsAutoMutex () this->rMutex.unlock (); } +inline epicsAutoMutexRelease :: epicsAutoMutexRelease ( epicsMutex & mutexIn ) : + rMutex ( mutexIn ) +{ + this->rMutex.unlock (); +} + +inline epicsAutoMutexRelease :: ~epicsAutoMutexRelease () +{ + this->rMutex.lock (); +} + #endif /*__cplusplus*/ #endif /* epicsMutexh */