epicsMutexMustCreate now osi; add support for epicsSemShowAll
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#ifndef epicsMutexh
|
||||
#define epicsMutexh
|
||||
|
||||
#include <stdarg.h>
|
||||
#include "epicsAssert.h"
|
||||
#include "shareLib.h"
|
||||
|
||||
@@ -59,9 +60,16 @@ private:
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /*__cplusplus*/
|
||||
/* The following should NOT be called by user code*/
|
||||
epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsdCreate(void);
|
||||
epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy(epicsMutexId id);
|
||||
epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsiCreate(
|
||||
const char *pFileName,int lineno);
|
||||
epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsiMustCreate(
|
||||
const char *pFileName,int lineno);
|
||||
|
||||
epicsShareFunc epicsMutexId epicsShareAPI epicsMutexCreate(void);
|
||||
epicsShareFunc epicsMutexId epicsShareAPI epicsMutexMustCreate (void);
|
||||
#define epicsMutexCreate() epicsMutexOsiCreate(__FILE__,__LINE__)
|
||||
#define epicsMutexMustCreate() epicsMutexOsiMustCreate(__FILE__,__LINE__)
|
||||
epicsShareFunc void epicsShareAPI epicsMutexDestroy(epicsMutexId id);
|
||||
epicsShareFunc void epicsShareAPI epicsMutexUnlock(epicsMutexId id);
|
||||
epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock(
|
||||
@@ -73,6 +81,8 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock(
|
||||
epicsMutexId id);
|
||||
epicsShareFunc void epicsShareAPI epicsMutexShow(
|
||||
epicsMutexId id,unsigned int level);
|
||||
epicsShareFunc void epicsShareAPI epicsMutexShowAll(
|
||||
int onlyLocked,unsigned int level);
|
||||
|
||||
/*NOTES:
|
||||
epicsMutex MUST implement recursive locking
|
||||
|
||||
@@ -34,7 +34,7 @@ unsigned long semStat[6];
|
||||
#endif
|
||||
|
||||
epicsMutexId
|
||||
epicsMutexCreate(void)
|
||||
epicsMutexOsdCreate(void)
|
||||
{
|
||||
rtems_status_code sc;
|
||||
rtems_id sid;
|
||||
@@ -86,14 +86,7 @@ epicsMutexCreate(void)
|
||||
return (epicsMutexId)sid;
|
||||
}
|
||||
|
||||
epicsMutexId epicsMutexMustCreate(void)
|
||||
{
|
||||
epicsMutexId id = epicsMutexCreate ();
|
||||
assert (id);
|
||||
return id;
|
||||
}
|
||||
|
||||
void epicsMutexDestroy(epicsMutexId id)
|
||||
void epicsMutexOsdDestroy(epicsMutexId id)
|
||||
{
|
||||
rtems_status_code sc;
|
||||
rtems_id sid;
|
||||
|
||||
@@ -57,9 +57,9 @@ typedef struct mutexSem {
|
||||
|
||||
|
||||
/*
|
||||
* epicsMutexCreate ()
|
||||
* epicsMutexOsdCreate ()
|
||||
*/
|
||||
epicsShareFunc epicsMutexId epicsShareAPI epicsMutexCreate (void)
|
||||
epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsdCreate (void)
|
||||
{
|
||||
mutexSem *pSem;
|
||||
|
||||
@@ -76,19 +76,9 @@ epicsShareFunc epicsMutexId epicsShareAPI epicsMutexCreate (void)
|
||||
}
|
||||
|
||||
/*
|
||||
* epicsMutexMustCreate ()
|
||||
* epicsMutexOsdDestroy ()
|
||||
*/
|
||||
epicsShareFunc epicsMutexId epicsShareAPI epicsMutexMustCreate ()
|
||||
{
|
||||
epicsMutexId id = epicsMutexCreate ();
|
||||
assert (id);
|
||||
return id;
|
||||
}
|
||||
|
||||
/*
|
||||
* epicsMutexDestroy ()
|
||||
*/
|
||||
epicsShareFunc void epicsShareAPI epicsMutexDestroy (epicsMutexId id)
|
||||
epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy (epicsMutexId id)
|
||||
{
|
||||
mutexSem *pSem = (mutexSem *) id;
|
||||
|
||||
@@ -196,19 +186,9 @@ epicsShareFunc epicsMutexId epicsShareAPI epicsMutexCreate ( void )
|
||||
}
|
||||
|
||||
/*
|
||||
* epicsMutexMustCreate ()
|
||||
* epicsMutexOsdDestroy ()
|
||||
*/
|
||||
epicsShareFunc semBinaryId epicsShareAPI epicsMutexMustCreate ()
|
||||
{
|
||||
epicsMutexId id = epicsMutexCreate ();
|
||||
assert ( id );
|
||||
return id;
|
||||
}
|
||||
|
||||
/*
|
||||
* epicsMutexDestroy ()
|
||||
*/
|
||||
epicsShareFunc void epicsShareAPI epicsMutexDestroy ( epicsMutexId id )
|
||||
epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy ( epicsMutexId id )
|
||||
{
|
||||
mutexSem *pSem = ( mutexSem * ) id;
|
||||
|
||||
@@ -299,19 +279,9 @@ epicsShareFunc epicsMutexId epicsShareAPI epicsMutexCreate ( void )
|
||||
}
|
||||
|
||||
/*
|
||||
* epicsMutexMustCreate ()
|
||||
* epicsMutexOsdDestroy ()
|
||||
*/
|
||||
epicsShareFunc epicsMutexId epicsShareAPI epicsMutexMustCreate ()
|
||||
{
|
||||
epicsMutexId id = epicsMutexCreate ();
|
||||
assert ( id );
|
||||
return id;
|
||||
}
|
||||
|
||||
/*
|
||||
* epicsMutexDestroy ()
|
||||
*/
|
||||
epicsShareFunc void epicsShareAPI epicsMutexDestroy ( epicsMutexId id )
|
||||
epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy ( epicsMutexId id )
|
||||
{
|
||||
mutexSem *pSem = ( mutexSem * ) id;
|
||||
|
||||
|
||||
@@ -68,20 +68,20 @@ static void convertDoubleToWakeTime(double timeout,struct timespec *wakeTime)
|
||||
}
|
||||
}
|
||||
|
||||
epicsMutexId epicsMutexCreate(void) {
|
||||
epicsMutexId epicsMutexOsdCreate(void) {
|
||||
mutex *pmutex;
|
||||
int status;
|
||||
|
||||
pmutex = callocMustSucceed(1,sizeof(mutex),"epicsMutexCreate");
|
||||
pmutex = callocMustSucceed(1,sizeof(mutex),"epicsMutexOsdCreate");
|
||||
status = pthread_mutexattr_init(&pmutex->mutexAttr);
|
||||
checkStatusQuit(status,"pthread_mutexattr_init","epicsMutexCreate");
|
||||
checkStatusQuit(status,"pthread_mutexattr_init","epicsMutexOsdCreate");
|
||||
#if defined _POSIX_THREAD_PRIO_INHERIT
|
||||
status = pthread_mutexattr_setprotocol(
|
||||
&pmutex->mutexAttr,PTHREAD_PRIO_INHERIT);
|
||||
if(errVerbose) checkStatus(status,"pthread_mutexattr_setprotocal");
|
||||
#endif /*_POSIX_THREAD_PRIO_INHERIT*/
|
||||
status = pthread_mutex_init(&pmutex->lock,&pmutex->mutexAttr);
|
||||
checkStatusQuit(status,"pthread_mutex_init","epicsMutexCreate");
|
||||
checkStatusQuit(status,"pthread_mutex_init","epicsMutexOsdCreate");
|
||||
#if defined _POSIX_THREAD_PROCESS_SHARED
|
||||
status = pthread_condattr_init(&pmutex->condAttr);
|
||||
checkStatus(status,"pthread_condattr_init");
|
||||
@@ -92,18 +92,11 @@ epicsMutexId epicsMutexCreate(void) {
|
||||
#else
|
||||
status = pthread_cond_init(&pmutex->waitToBeOwner,0);
|
||||
#endif /*_POSIX_THREAD_PROCESS_SHARED*/
|
||||
checkStatusQuit(status,"pthread_cond_init","epicsMutexCreate");
|
||||
checkStatusQuit(status,"pthread_cond_init","epicsMutexOsdCreate");
|
||||
return((epicsMutexId)pmutex);
|
||||
}
|
||||
|
||||
epicsMutexId epicsMutexMustCreate(void)
|
||||
{
|
||||
epicsMutexId id = epicsMutexCreate ();
|
||||
assert (id);
|
||||
return id;
|
||||
}
|
||||
|
||||
void epicsMutexDestroy(epicsMutexId id)
|
||||
void epicsMutexOsdDestroy(epicsMutexId id)
|
||||
{
|
||||
mutex *pmutex = (mutex *)id;
|
||||
int status;
|
||||
|
||||
@@ -19,20 +19,13 @@ int sysClkRateGet(void);
|
||||
|
||||
#include "epicsMutex.h"
|
||||
|
||||
epicsMutexId epicsMutexCreate(void)
|
||||
epicsMutexId epicsMutexOsdCreate(void)
|
||||
{
|
||||
return((epicsMutexId)
|
||||
semMCreate(SEM_DELETE_SAFE|SEM_INVERSION_SAFE|SEM_Q_PRIORITY));
|
||||
}
|
||||
|
||||
epicsMutexId epicsMutexMustCreate(void)
|
||||
{
|
||||
epicsMutexId id = epicsMutexCreate ();
|
||||
assert (id);
|
||||
return id;
|
||||
}
|
||||
|
||||
void epicsMutexDestroy(epicsMutexId id)
|
||||
void epicsMutexOsdDestroy(epicsMutexId id)
|
||||
{
|
||||
semDelete((SEM_ID)id);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user