moved epicsMutex implementation out of header file
This commit is contained in:
+1
-112
@@ -12,7 +12,7 @@ typedef enum {
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
class epicsMutex {
|
||||
class epicsShareClass epicsMutex {
|
||||
public:
|
||||
epicsMutex ();
|
||||
~epicsMutex ();
|
||||
@@ -30,32 +30,6 @@ private:
|
||||
epicsMutex & operator = ( const epicsMutex & );
|
||||
};
|
||||
|
||||
// Automatically applies and releases the mutex.
|
||||
// This is for use in situations where C++ exceptions are possible.
|
||||
class epicsAutoMutex {
|
||||
public:
|
||||
epicsAutoMutex ( epicsMutex & );
|
||||
~epicsAutoMutex ();
|
||||
private:
|
||||
epicsMutex & rMutex;
|
||||
epicsAutoMutex ( const epicsAutoMutex & );
|
||||
epicsAutoMutex & operator = ( const epicsAutoMutex & );
|
||||
friend class epicsAutoMutexRelease;
|
||||
};
|
||||
|
||||
// Automatically releases and reapplies the mutex.
|
||||
// This is for use in situations where C++ exceptions are possible.
|
||||
class epicsAutoMutexRelease {
|
||||
public:
|
||||
epicsAutoMutexRelease ( epicsAutoMutex & );
|
||||
~epicsAutoMutexRelease ();
|
||||
private:
|
||||
epicsAutoMutex & autoMutex;
|
||||
epicsAutoMutexRelease ( const epicsAutoMutexRelease & );
|
||||
epicsAutoMutexRelease & operator = ( const epicsAutoMutexRelease & );
|
||||
};
|
||||
|
||||
|
||||
#endif /*__cplusplus*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -96,89 +70,4 @@ epicsShareFunc void epicsShareAPI epicsMutexShowAll(
|
||||
|
||||
#include "osdMutex.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
#include "locationException.h"
|
||||
|
||||
inline epicsMutex :: epicsMutex () :
|
||||
id ( epicsMutexCreate () )
|
||||
{
|
||||
if ( this->id == 0 ) {
|
||||
throwWithLocation ( noMemory () );
|
||||
}
|
||||
}
|
||||
|
||||
inline epicsMutex ::~epicsMutex ()
|
||||
{
|
||||
epicsMutexDestroy ( this->id );
|
||||
}
|
||||
|
||||
inline void epicsMutex :: lock ()
|
||||
{
|
||||
epicsMutexLockStatus status = epicsMutexLock ( this->id );
|
||||
if ( status != epicsMutexLockOK ) {
|
||||
throwWithLocation ( invalidSemaphore () );
|
||||
}
|
||||
}
|
||||
|
||||
inline 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
|
||||
}
|
||||
|
||||
inline 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
|
||||
}
|
||||
|
||||
inline void epicsMutex :: unlock ()
|
||||
{
|
||||
epicsMutexUnlock ( this->id );
|
||||
}
|
||||
|
||||
inline void epicsMutex :: show ( unsigned level ) const
|
||||
{
|
||||
epicsMutexShow ( this->id, level );
|
||||
}
|
||||
|
||||
inline epicsAutoMutex :: epicsAutoMutex ( epicsMutex & mutexIn ) :
|
||||
rMutex ( mutexIn )
|
||||
{
|
||||
this->rMutex.lock ();
|
||||
}
|
||||
|
||||
inline epicsAutoMutex :: ~epicsAutoMutex ()
|
||||
{
|
||||
this->rMutex.unlock ();
|
||||
}
|
||||
|
||||
inline epicsAutoMutexRelease :: epicsAutoMutexRelease ( epicsAutoMutex & autoMutexIn ) :
|
||||
autoMutex ( autoMutexIn )
|
||||
{
|
||||
this->autoMutex.rMutex.unlock ();
|
||||
}
|
||||
|
||||
inline epicsAutoMutexRelease :: ~epicsAutoMutexRelease ()
|
||||
{
|
||||
this->autoMutex.rMutex.lock ();
|
||||
}
|
||||
|
||||
#endif /*__cplusplus*/
|
||||
|
||||
#endif /* epicsMutexh */
|
||||
|
||||
Reference in New Issue
Block a user