From 7fcb189dfbd95828ea9a45038914c2c05d0b7ba3 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Wed, 8 May 2002 23:15:31 +0000 Subject: [PATCH] made lock/unlock entry points inline again --- src/libCom/osi/epicsMutex.cpp | 47 +++++----------------------- src/libCom/osi/epicsMutex.h | 58 ++++++++++++++++++++++++++++++++--- 2 files changed, 60 insertions(+), 45 deletions(-) diff --git a/src/libCom/osi/epicsMutex.cpp b/src/libCom/osi/epicsMutex.cpp index c708e2fa7..75b18b2d5 100644 --- a/src/libCom/osi/epicsMutex.cpp +++ b/src/libCom/osi/epicsMutex.cpp @@ -140,46 +140,13 @@ epicsMutex ::~epicsMutex () epicsMutexDestroy ( this->id ); } -void epicsMutex :: lock () -{ - epicsMutexLockStatus status = epicsMutexLock ( this->id ); - if ( status != epicsMutexLockOK ) { - throwWithLocation ( invalidSemaphore () ); - } -} - -bool epicsMutex :: lock ( double timeOut ) -{ - epicsMutexLockStatus status = epicsMutexLockWithTimeout ( this->id, timeOut ); - if (status==epicsMutexLockOK) { - return true; - } else if (status==epicsMutexLockTimeout) { - return false; - } else { - throwWithLocation ( invalidSemaphore () ); - } - return false; // never here, compiler is happy -} - -bool epicsMutex :: tryLock () -{ - epicsMutexLockStatus status = epicsMutexTryLock ( this->id ); - if ( status == epicsMutexLockOK ) { - return true; - } else if ( status == epicsMutexLockTimeout ) { - return false; - } else { - throwWithLocation ( invalidSemaphore () ); - } - return false; // never here, but compiler is happy -} - -void epicsMutex :: unlock () -{ - epicsMutexUnlock ( this->id ); -} - void epicsMutex :: show ( unsigned level ) const { epicsMutexShow ( this->id, level ); -} \ No newline at end of file +} + +void epicsMutex :: throwInvalidSemaphore () +{ + throw invalidSemaphore (); +} + diff --git a/src/libCom/osi/epicsMutex.h b/src/libCom/osi/epicsMutex.h index e99670a9e..c4c3e26c3 100644 --- a/src/libCom/osi/epicsMutex.h +++ b/src/libCom/osi/epicsMutex.h @@ -12,19 +12,20 @@ typedef enum { #ifdef __cplusplus -class epicsShareClass epicsMutex { +class epicsMutex { public: - epicsMutex (); - ~epicsMutex (); + epicsShareFunc epicsMutex (); + epicsShareFunc ~epicsMutex (); + epicsShareFunc void show ( unsigned level ) const; void lock (); /* blocks until success */ + void unlock (); bool lock ( double timeOut ); /* true if successful */ bool tryLock (); /* true if successful */ - void unlock (); - void show ( unsigned level ) const; class invalidSemaphore {}; // exception private: epicsMutexId id; + epicsShareFunc static void throwInvalidSemaphore (); epicsMutex ( const epicsMutex & ); epicsMutex & operator = ( const epicsMutex & ); }; @@ -69,4 +70,51 @@ epicsShareFunc void epicsShareAPI epicsMutexShowAll( #include "osdMutex.h" +#ifdef __cplusplus + +inline void epicsMutex::lock () +{ + epicsMutexLockStatus status = epicsMutexLock ( this->id ); + if ( status != epicsMutexLockOK ) { + epicsMutex::throwInvalidSemaphore (); + } +} + +inline bool epicsMutex::lock ( double timeOut ) +{ + epicsMutexLockStatus status = epicsMutexLockWithTimeout ( this->id, timeOut ); + if ( status == epicsMutexLockOK ) { + return true; + } + else if ( status == epicsMutexLockTimeout ) { + return false; + } + else { + epicsMutex::throwInvalidSemaphore (); + return false; // never here, compiler is happy + } +} + +inline bool epicsMutex::tryLock () +{ + epicsMutexLockStatus status = epicsMutexTryLock ( this->id ); + if ( status == epicsMutexLockOK ) { + return true; + } + else if ( status == epicsMutexLockTimeout ) { + return false; + } + else { + epicsMutex::throwInvalidSemaphore (); + return false; // never here, but compiler is happy + } +} + +inline void epicsMutex::unlock () +{ + epicsMutexUnlock ( this->id ); +} + +#endif /* __cplusplus */ + #endif /* epicsMutexh */