diff --git a/src/db/dbEvent.h b/src/db/dbEvent.h index ffce94628..d5f23e7b1 100644 --- a/src/db/dbEvent.h +++ b/src/db/dbEvent.h @@ -30,6 +30,17 @@ #ifndef INCLdbEventh #define INCLdbEventh +#ifdef epicsExportSharedSymbols +# undef epicsExportSharedSymbols +# define INCLdbEventhExporting +#endif + +#include "epicsThread.h" + +#ifdef INCLdbEventhExporting +# define epicsExportSharedSymbols +#endif + #include "shareLib.h" #ifdef __cplusplus @@ -52,7 +63,7 @@ typedef void OVRFFUNC (void *overflow_arg, unsigned count); typedef void EXTRALABORFUNC (void *extralabor_arg); epicsShareFunc dbEventCtx epicsShareAPI db_init_events (void); epicsShareFunc int epicsShareAPI db_start_events ( - dbEventCtx ctx, const char *taskname, void (*init_func)(void *), + dbEventCtx ctx, const char *taskname, void (*init_func)(epicsThreadId id), void *init_func_arg, unsigned osiPriority ); epicsShareFunc void epicsShareAPI db_close_events (dbEventCtx ctx); epicsShareFunc void epicsShareAPI db_event_flow_ctrl_mode_on (dbEventCtx ctx); diff --git a/src/libCom/osi/epicsEvent.h b/src/libCom/osi/epicsEvent.h index d9dd8cd3d..c05038ffc 100644 --- a/src/libCom/osi/epicsEvent.h +++ b/src/libCom/osi/epicsEvent.h @@ -4,7 +4,7 @@ #include "epicsAssert.h" #include "shareLib.h" -typedef void *epicsEventId; +typedef struct epicsEventOSD *epicsEventId; typedef enum { epicsEventWaitOK,epicsEventWaitTimeout,epicsEventWaitError diff --git a/src/libCom/osi/epicsMutex.h b/src/libCom/osi/epicsMutex.h index 37a1e1e06..e5666c5ff 100644 --- a/src/libCom/osi/epicsMutex.h +++ b/src/libCom/osi/epicsMutex.h @@ -5,7 +5,7 @@ #include "epicsAssert.h" #include "shareLib.h" -typedef void *epicsMutexId; +typedef struct epicsMutexOSD *epicsMutexId; typedef enum { epicsMutexLockOK,epicsMutexLockTimeout,epicsMutexLockError } epicsMutexLockStatus; diff --git a/src/libCom/osi/epicsThread.h b/src/libCom/osi/epicsThread.h index d8bbb4221..195004f99 100644 --- a/src/libCom/osi/epicsThread.h +++ b/src/libCom/osi/epicsThread.h @@ -51,7 +51,7 @@ if(*(id)<=0) epicsThreadOnceOsd((id),(func),(arg)) epicsShareFunc void epicsShareAPI epicsThreadExitMain(void); /* (epicsThreadId)0 is guaranteed to be an invalid thread id */ -typedef void *epicsThreadId; +typedef struct epicsThreadOSD *epicsThreadId; epicsShareFunc epicsThreadId epicsShareAPI epicsThreadCreate(const char *name, unsigned int priority, unsigned int stackSize, @@ -88,7 +88,7 @@ epicsShareFunc void epicsShareAPI epicsThreadShowAll(unsigned int level); epicsShareFunc void epicsShareAPI epicsThreadShow( epicsThreadId id,unsigned int level); -typedef void * epicsThreadPrivateId; +typedef struct epicsThreadPrivateOSD * epicsThreadPrivateId; epicsShareFunc epicsThreadPrivateId epicsShareAPI epicsThreadPrivateCreate(void); epicsShareFunc void epicsShareAPI epicsThreadPrivateDelete(epicsThreadPrivateId id); epicsShareFunc void epicsShareAPI epicsThreadPrivateSet(epicsThreadPrivateId,void *); @@ -128,7 +128,7 @@ public: /* these operate on the current thread */ static void suspendSelf (); static void sleep (double seconds); - static epicsThread & getSelf (); + //static epicsThread & getSelf (); static const char * getNameSelf (); private: epicsThreadRunable &runable; @@ -218,10 +218,10 @@ inline void epicsThread::sleep (double seconds) epicsThreadSleep (seconds); } -inline epicsThread & epicsThread::getSelf () -{ - return * static_cast ( epicsThreadGetIdSelf () ); -} +//inline epicsThread & epicsThread::getSelf () +//{ +// return * static_cast ( epicsThreadGetIdSelf () ); +//} inline const char *epicsThread::getNameSelf () { diff --git a/src/libCom/osi/os/WIN32/osdEvent.c b/src/libCom/osi/os/WIN32/osdEvent.c index 7caa5993c..ff1791e7b 100644 --- a/src/libCom/osi/os/WIN32/osdEvent.c +++ b/src/libCom/osi/os/WIN32/osdEvent.c @@ -47,9 +47,9 @@ #include "epicsAssert.h" #include "cantProceed.h" -typedef struct eventSem { +typedef struct epicsEventOSD { HANDLE handle; -} eventSem; +} epicsEventOSD; /* * epicsEventCreate () @@ -57,7 +57,7 @@ typedef struct eventSem { epicsShareFunc epicsEventId epicsShareAPI epicsEventCreate ( epicsEventInitialState initialState ) { - eventSem *pSem; + epicsEventOSD *pSem; pSem = malloc ( sizeof ( *pSem ) ); if ( pSem ) { @@ -68,7 +68,7 @@ epicsShareFunc epicsEventId epicsShareAPI epicsEventCreate ( } } - return ( epicsEventId ) pSem; + return pSem; } /* @@ -85,34 +85,28 @@ epicsShareFunc epicsEventId epicsShareAPI epicsEventMustCreate ( /* * epicsEventDestroy () */ -epicsShareFunc void epicsShareAPI epicsEventDestroy (epicsEventId id) +epicsShareFunc void epicsShareAPI epicsEventDestroy ( epicsEventId pSem ) { - eventSem *pSem = (eventSem *) id; - - CloseHandle (pSem->handle); - free (pSem); + CloseHandle ( pSem->handle ); + free ( pSem ); } /* * epicsEventSignal () */ -epicsShareFunc void epicsShareAPI epicsEventSignal (epicsEventId id) +epicsShareFunc void epicsShareAPI epicsEventSignal ( epicsEventId pSem ) { - eventSem *pSem = (eventSem *) id; BOOL status; - - status = SetEvent (pSem->handle); - assert (status); + status = SetEvent ( pSem->handle ); + assert ( status ); } /* * epicsEventWait () */ -epicsShareFunc epicsEventWaitStatus epicsShareAPI epicsEventWait (epicsEventId id) +epicsShareFunc epicsEventWaitStatus epicsShareAPI epicsEventWait ( epicsEventId pSem ) { - eventSem *pSem = (eventSem *) id; DWORD status; - status = WaitForSingleObject (pSem->handle, INFINITE); if ( status == WAIT_OBJECT_0 ) { return epicsEventWaitOK; @@ -126,10 +120,9 @@ epicsShareFunc epicsEventWaitStatus epicsShareAPI epicsEventWait (epicsEventId i * epicsEventWaitWithTimeout () */ epicsShareFunc epicsEventWaitStatus epicsShareAPI epicsEventWaitWithTimeout ( - epicsEventId id, double timeOut) + epicsEventId pSem, double timeOut ) { static const unsigned mSecPerSec = 1000; - eventSem *pSem = (eventSem *) id; DWORD status; DWORD tmo; @@ -160,16 +153,15 @@ epicsShareFunc epicsEventWaitStatus epicsShareAPI epicsEventWaitWithTimeout ( /* * epicsEventTryWait () */ -epicsShareFunc epicsEventWaitStatus epicsShareAPI epicsEventTryWait (epicsEventId id) +epicsShareFunc epicsEventWaitStatus epicsShareAPI epicsEventTryWait ( epicsEventId pSem ) { - eventSem *pSem = (eventSem *) id; DWORD status; - status = WaitForSingleObject (pSem->handle, 0); + status = WaitForSingleObject ( pSem->handle, 0 ); if ( status == WAIT_OBJECT_0 ) { return epicsEventWaitOK; } - else if (status == WAIT_TIMEOUT) { + else if ( status == WAIT_TIMEOUT ) { return epicsEventWaitTimeout; } else { @@ -180,6 +172,6 @@ epicsShareFunc epicsEventWaitStatus epicsShareAPI epicsEventTryWait (epicsEventI /* * epicsEventShow () */ -epicsShareFunc void epicsShareAPI epicsEventShow (epicsEventId id, unsigned level) +epicsShareFunc void epicsShareAPI epicsEventShow ( epicsEventId id, unsigned level ) { } diff --git a/src/libCom/osi/os/WIN32/osdMutex.c b/src/libCom/osi/os/WIN32/osdMutex.c index 61fb4e8d0..a494a7eff 100644 --- a/src/libCom/osi/os/WIN32/osdMutex.c +++ b/src/libCom/osi/os/WIN32/osdMutex.c @@ -29,6 +29,7 @@ * Argonne National Laboratory */ +#include #include #ifndef VC_EXTRALEAN @@ -47,13 +48,11 @@ #include "epicsAssert.h" #include "cantProceed.h" -static const unsigned mSecPerSecOsdSem = 1000u; - #if 0 -typedef struct mutexSem { +typedef struct epicsMutexOSD { HANDLE handle; -}mutexSem; +}epicsMutexOSD; /* @@ -61,7 +60,7 @@ typedef struct mutexSem { */ epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsdCreate (void) { - mutexSem *pSem; + epicsMutexOSD *pSem; pSem = malloc ( sizeof (*pSem) ); if (pSem) { @@ -72,16 +71,14 @@ epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsdCreate (void) } } - return (epicsMutexId) pSem; + return pSem; } /* * epicsMutexOsdDestroy () */ -epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy (epicsMutexId id) +epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy (epicsMutexId pSem) { - mutexSem *pSem = (mutexSem *) id; - CloseHandle (pSem->handle); free (pSem); } @@ -89,11 +86,9 @@ epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy (epicsMutexId id) /* * epicsMutexUnlock () */ -epicsShareFunc void epicsShareAPI epicsMutexUnlock (epicsMutexId id) +epicsShareFunc void epicsShareAPI epicsMutexUnlock (epicsMutexId pSem) { - mutexSem *pSem = (mutexSem *) id; BOOL success; - success = ReleaseMutex (pSem->handle); assert (success); } @@ -101,11 +96,9 @@ epicsShareFunc void epicsShareAPI epicsMutexUnlock (epicsMutexId id) /* * epicsMutexLock () */ -epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock (epicsMutexId id) +epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock (epicsMutexId pSem) { - mutexSem *pSem = (mutexSem *) id; DWORD status; - status = WaitForSingleObject (pSem->handle, INFINITE); if ( status == WAIT_OBJECT_0 ) { return epicsMutexLockOK; @@ -118,18 +111,29 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock (epicsMutexId i /* * epicsMutexLockWithTimeout () */ -epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLockWithTimeout (epicsMutexId id, double timeOut) +epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLockWithTimeout (epicsMutexId pSem, double timeOut) { - mutexSem *pSem = (mutexSem *) id; + static const unsigned mSecPerSec = 1000u; DWORD status; DWORD tmo; - tmo = (DWORD) (timeOut * mSecPerSecOsdSem); - status = WaitForSingleObject (pSem->handle, tmo); + if ( timeOut <= 0.0 ) { + tmo = 0u; + } + else if ( timeOut >= INFINITE / mSecPerSec ) { + tmo = INFINITE - 1; + } + else { + tmo = ( DWORD ) ( ( timeOut * mSecPerSec ) + 0.5 ); + if ( tmo == 0 ) { + tmo = 1; + } + } + status = WaitForSingleObject ( pSem->handle, tmo ); if ( status == WAIT_OBJECT_0 ) { return epicsMutexLockOK; } - else if (status == WAIT_TIMEOUT) { + else if ( status == WAIT_TIMEOUT ) { return epicsMutexLockTimeout; } else { @@ -140,9 +144,8 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLockWithTimeout (epi /* * epicsMutexTryLock () */ -epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock (epicsMutexId id) +epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock (epicsMutexId pSem) { - mutexSem *pSem = (mutexSem *) id; DWORD status; status = WaitForSingleObject (pSem->handle, 0); @@ -160,38 +163,36 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock (epicsMutexI /* * epicsMutexShow () */ -epicsShareFunc void epicsShareAPI epicsMutexShow (epicsMutexId id, unsigned level) +epicsShareFunc void epicsShareAPI epicsMutexShow (epicsMutexId pSem, unsigned level) { } #elif 0 -typedef struct mutexSem { +typedef struct epicsMutexOSD { CRITICAL_SECTION cs; -} mutexSem; +} epicsMutexOSD; /* * epicsMutexCreate () */ epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsdCreate ( void ) { - mutexSem *pSem; + epicsMutexOSD *pSem; pSem = malloc ( sizeof (*pSem) ); if ( pSem ) { InitializeCriticalSection ( &pSem->cs ); } - return (epicsMutexId) pSem; + return pSem; } /* * epicsMutexOsdDestroy () */ -epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy ( epicsMutexId id ) +epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy ( epicsMutexId pSem ) { - mutexSem *pSem = ( mutexSem * ) id; - DeleteCriticalSection ( &pSem->cs ); free ( pSem ); } @@ -199,18 +200,16 @@ epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy ( epicsMutexId id ) /* * epicsMutexUnlock () */ -epicsShareFunc void epicsShareAPI epicsMutexUnlock ( epicsMutexId id ) +epicsShareFunc void epicsShareAPI epicsMutexUnlock ( epicsMutexId pSem ) { - mutexSem *pSem = ( mutexSem * ) id; LeaveCriticalSection ( &pSem->cs ); } /* * epicsMutexLock () */ -epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock ( epicsMutexId id ) +epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock ( epicsMutexId pSem ) { - mutexSem *pSem = ( mutexSem * ) id; EnterCriticalSection ( &pSem->cs ); return epicsMutexLockOK; } @@ -218,9 +217,8 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock ( epicsMutexId /* * epicsMutexLockWithTimeout () */ -epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLockWithTimeout ( epicsMutexId id, double timeOut ) +epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLockWithTimeout ( epicsMutexId pSem, double timeOut ) { - mutexSem *pSem = ( mutexSem * ) id; EnterCriticalSection ( &pSem->cs ); return epicsMutexLockOK; } @@ -228,9 +226,8 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLockWithTimeout ( ep /* * epicsMutexTryLock () */ -epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock ( epicsMutexId id ) +epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock ( epicsMutexId pSem ) { - mutexSem *pSem = ( mutexSem * ) id; if ( TryEnterCriticalSection ( &pSem->cs ) ) { return epicsMutexLockOK; } @@ -242,25 +239,25 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock ( epicsMutex /* * epicsMutexShow () */ -epicsShareFunc void epicsShareAPI epicsMutexShow ( epicsMutexId id, unsigned level ) +epicsShareFunc void epicsShareAPI epicsMutexShow ( epicsMutexId pSem, unsigned level ) { } #else -typedef struct mutexSem { +typedef struct epicsMutexOSD { CRITICAL_SECTION cs; DWORD threadId; HANDLE unlockSignal; unsigned count; -} mutexSem; +} epicsMutexOSD; /* * epicsMutexCreate () */ epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsdCreate ( void ) { - mutexSem *pSem; + epicsMutexOSD *pSem; pSem = malloc ( sizeof (*pSem) ); if ( pSem ) { @@ -275,16 +272,14 @@ epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsdCreate ( void ) pSem->count = 0u; } } - return (epicsMutexId) pSem; + return pSem; } /* * epicsMutexOsdDestroy () */ -epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy ( epicsMutexId id ) -{ - mutexSem *pSem = ( mutexSem * ) id; - +epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy ( epicsMutexId pSem ) +{ DeleteCriticalSection ( &pSem->cs ); CloseHandle ( pSem->unlockSignal ); free ( pSem ); @@ -293,9 +288,8 @@ epicsShareFunc void epicsShareAPI epicsMutexOsdDestroy ( epicsMutexId id ) /* * epicsMutexUnlock () */ -epicsShareFunc void epicsShareAPI epicsMutexUnlock ( epicsMutexId id ) +epicsShareFunc void epicsShareAPI epicsMutexUnlock ( epicsMutexId pSem ) { - mutexSem *pSem = ( mutexSem * ) id; unsigned signalNeeded; DWORD status; @@ -321,10 +315,9 @@ epicsShareFunc void epicsShareAPI epicsMutexUnlock ( epicsMutexId id ) /* * epicsMutexLock () */ -epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock ( epicsMutexId id ) +epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock ( epicsMutexId pSem ) { DWORD thisThread = GetCurrentThreadId (); - mutexSem *pSem = ( mutexSem * ) id; EnterCriticalSection ( &pSem->cs ); @@ -351,12 +344,11 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock ( epicsMutexId /* * epicsMutexLockWithTimeout () */ -epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLockWithTimeout ( epicsMutexId id, double timeOut ) +epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLockWithTimeout ( epicsMutexId pSem, double timeOut ) { + static const unsigned mSecPerSec = 1000u; DWORD thisThread = GetCurrentThreadId (); - mutexSem *pSem = ( mutexSem * ) id; - EnterCriticalSection ( &pSem->cs ); while ( pSem->count && pSem->threadId != thisThread ) { @@ -364,7 +356,20 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLockWithTimeout ( ep DWORD status; LeaveCriticalSection ( &pSem->cs ); - tmo = ( DWORD ) ( timeOut * mSecPerSecOsdSem ); + + if ( timeOut <= 0.0 ) { + tmo = 0u; + } + else if ( timeOut >= INFINITE / mSecPerSec ) { + tmo = INFINITE - 1; + } + else { + tmo = ( DWORD ) ( ( timeOut * mSecPerSec ) + 0.5 ); + if ( tmo == 0 ) { + tmo = 1; + } + } + status = WaitForSingleObject ( pSem->unlockSignal, tmo ); if ( status == WAIT_TIMEOUT ) { return epicsMutexLockTimeout; @@ -384,12 +389,10 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLockWithTimeout ( ep /* * epicsMutexTryLock () */ -epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock ( epicsMutexId id ) +epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock ( epicsMutexId pSem ) { DWORD thisThread = GetCurrentThreadId (); - mutexSem *pSem = ( mutexSem * ) id; - EnterCriticalSection ( &pSem->cs ); if ( pSem->count && pSem->threadId != thisThread ) { @@ -409,10 +412,13 @@ epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock ( epicsMutex /* * epicsMutexShow () */ -epicsShareFunc void epicsShareAPI epicsMutexShow ( epicsMutexId id, unsigned level ) +epicsShareFunc void epicsShareAPI epicsMutexShow ( epicsMutexId pSem, unsigned level ) { + printf ("epicsMutex: count=%u, threadid=%x %s\n", + pSem->count, pSem->threadId, + pSem->threadId==GetCurrentThreadId()? + "owned by this thread":"" ); } - #endif diff --git a/src/libCom/osi/os/WIN32/osdThread.c b/src/libCom/osi/os/WIN32/osdThread.c index d01cdcdfb..47d021d81 100644 --- a/src/libCom/osi/os/WIN32/osdThread.c +++ b/src/libCom/osi/os/WIN32/osdThread.c @@ -39,9 +39,9 @@ typedef struct win32ThreadParam { static DWORD tlsIndexWIN32 = 0xFFFFFFFF; -typedef struct osdThreadPrivate { +typedef struct epicsThreadPrivateOSD { DWORD key; -} osdThreadPrivate; +} epicsThreadPrivateOSD; static HANDLE win32ThreadGlobalMutex = 0; @@ -595,7 +595,7 @@ epicsShareFunc void epicsShareAPI epicsThreadOnceOsd ( */ epicsShareFunc epicsThreadPrivateId epicsShareAPI epicsThreadPrivateCreate () { - osdThreadPrivate *p = (osdThreadPrivate *) malloc (sizeof (*p)); + epicsThreadPrivateOSD *p = ( epicsThreadPrivateOSD * ) malloc ( sizeof ( *p ) ); if (p) { p->key = TlsAlloc (); if (p->key==0xFFFFFFFF) { @@ -603,37 +603,34 @@ epicsShareFunc epicsThreadPrivateId epicsShareAPI epicsThreadPrivateCreate () p = 0; } } - return (epicsThreadPrivateId) p; + return p; } /* * epicsThreadPrivateDelete () */ -epicsShareFunc void epicsShareAPI epicsThreadPrivateDelete (epicsThreadPrivateId id) +epicsShareFunc void epicsShareAPI epicsThreadPrivateDelete ( epicsThreadPrivateId p ) { - osdThreadPrivate *p = (osdThreadPrivate *) id; - BOOL stat = TlsFree (p->key); - assert (stat); - free (p); + BOOL stat = TlsFree ( p->key ); + assert ( stat ); + free ( p ); } /* * epicsThreadPrivateSet () */ -epicsShareFunc void epicsShareAPI epicsThreadPrivateSet (epicsThreadPrivateId id, void *pVal) +epicsShareFunc void epicsShareAPI epicsThreadPrivateSet ( epicsThreadPrivateId pPvt, void *pVal ) { - struct osdThreadPrivate *pPvt = (struct osdThreadPrivate *) id; - BOOL stat = TlsSetValue (pPvt->key, (void *) pVal ); + BOOL stat = TlsSetValue ( pPvt->key, (void *) pVal ); assert (stat); } /* * epicsThreadPrivateGet () */ -epicsShareFunc void * epicsShareAPI epicsThreadPrivateGet (epicsThreadPrivateId id) +epicsShareFunc void * epicsShareAPI epicsThreadPrivateGet ( epicsThreadPrivateId pPvt ) { - struct osdThreadPrivate *pPvt = (struct osdThreadPrivate *) id; - return (void *) TlsGetValue (pPvt->key); + return ( void * ) TlsGetValue ( pPvt->key ); } #ifdef TEST_CODES diff --git a/src/libCom/osi/os/default/osdEnv.c b/src/libCom/osi/os/default/osdEnv.c index 724be7132..db1851203 100644 --- a/src/libCom/osi/os/default/osdEnv.c +++ b/src/libCom/osi/os/default/osdEnv.c @@ -14,11 +14,10 @@ #include #include -#include -#include -#include - #define epicsExportSharedSymbols +#include +#include +#include #include "epicsFindSymbol.h" /* diff --git a/src/libCom/osi/os/posix/osdEvent.c b/src/libCom/osi/os/posix/osdEvent.c index 4ce03831a..5aeccefa6 100644 --- a/src/libCom/osi/os/posix/osdEvent.c +++ b/src/libCom/osi/os/posix/osdEvent.c @@ -27,11 +27,11 @@ of this distribution. #undef _POSIX_THREAD_PROCESS_SHARED #undef _POSIX_THREAD_PRIO_INHERIT -typedef struct event { +typedef struct epicsEventOSD { pthread_mutex_t mutex; pthread_cond_t cond; int isFull; -}event; +}epicsEventOSD; #define checkStatus(status,message) \ if((status)) { \ @@ -64,10 +64,10 @@ static void convertDoubleToWakeTime(double timeout,struct timespec *wakeTime) epicsEventId epicsEventCreate(epicsEventInitialState initialState) { - event *pevent; - int status; + epicsEventOSD *pevent; + int status; - pevent = callocMustSucceed(1,sizeof(event),"epicsEventCreate"); + pevent = callocMustSucceed(1,sizeof(*pevent),"epicsEventCreate"); status = pthread_mutex_init(&pevent->mutex,0); checkStatusQuit(status,"pthread_mutex_init","epicsEventCreate"); status = pthread_cond_init(&pevent->cond,0); @@ -83,9 +83,8 @@ epicsEventId epicsEventMustCreate(epicsEventInitialState initialState) return id; } -void epicsEventDestroy(epicsEventId id) +void epicsEventDestroy(epicsEventId pevent) { - event *pevent = (event *)id; int status; status = pthread_mutex_destroy(&pevent->mutex); @@ -95,9 +94,8 @@ void epicsEventDestroy(epicsEventId id) free(pevent); } -void epicsEventSignal(epicsEventId id) +void epicsEventSignal(epicsEventId pevent) { - event *pevent = (event *)id; int status; status = pthread_mutex_lock(&pevent->mutex); @@ -111,9 +109,8 @@ void epicsEventSignal(epicsEventId id) checkStatusQuit(status,"pthread_mutex_unlock","epicsEventSignal"); } -epicsEventWaitStatus epicsEventWait(epicsEventId id) +epicsEventWaitStatus epicsEventWait(epicsEventId pevent) { - event *pevent = (event *)id; int status; if(!pevent) return(epicsEventWaitError); @@ -130,9 +127,8 @@ epicsEventWaitStatus epicsEventWait(epicsEventId id) return(epicsEventWaitOK); } -epicsEventWaitStatus epicsEventWaitWithTimeout(epicsEventId id, double timeout) +epicsEventWaitStatus epicsEventWaitWithTimeout(epicsEventId pevent, double timeout) { - event *pevent = (event *)id; struct timespec wakeTime; int status = 0; int unlockStatus; diff --git a/src/libCom/osi/os/posix/osdMutex.c b/src/libCom/osi/os/posix/osdMutex.c index 69054d2de..ca6e83f2a 100644 --- a/src/libCom/osi/os/posix/osdMutex.c +++ b/src/libCom/osi/os/posix/osdMutex.c @@ -27,7 +27,7 @@ of this distribution. #undef _POSIX_THREAD_PROCESS_SHARED #undef _POSIX_THREAD_PRIO_INHERIT -typedef struct mutex { +typedef struct epicsMutexOSD { pthread_mutexattr_t mutexAttr; pthread_mutex_t lock; pthread_cond_t waitToBeOwner; @@ -37,7 +37,7 @@ typedef struct mutex { int count; int owned; /* TRUE | FALSE */ pthread_t ownerTid; -}mutex; +}epicsMutexOSD; #define checkStatus(status,message) \ if((status)) { \ @@ -69,10 +69,10 @@ static void convertDoubleToWakeTime(double timeout,struct timespec *wakeTime) } epicsMutexId epicsMutexOsdCreate(void) { - mutex *pmutex; - int status; + epicsMutexOSD *pmutex; + int status; - pmutex = callocMustSucceed(1,sizeof(mutex),"epicsMutexOsdCreate"); + pmutex = callocMustSucceed(1,sizeof(*pmutex),"epicsMutexOsdCreate"); status = pthread_mutexattr_init(&pmutex->mutexAttr); checkStatusQuit(status,"pthread_mutexattr_init","epicsMutexOsdCreate"); #if defined _POSIX_THREAD_PRIO_INHERIT @@ -96,9 +96,8 @@ epicsMutexId epicsMutexOsdCreate(void) { return((epicsMutexId)pmutex); } -void epicsMutexOsdDestroy(epicsMutexId id) +void epicsMutexOsdDestroy(epicsMutexId pmutex) { - mutex *pmutex = (mutex *)id; int status; status = pthread_cond_destroy(&pmutex->waitToBeOwner); @@ -113,9 +112,8 @@ void epicsMutexOsdDestroy(epicsMutexId id) free(pmutex); } -void epicsMutexUnlock(epicsMutexId id) +void epicsMutexUnlock(epicsMutexId pmutex) { - mutex *pmutex = (mutex *)id; int status; status = pthread_mutex_lock(&pmutex->lock); @@ -136,9 +134,8 @@ void epicsMutexUnlock(epicsMutexId id) checkStatusQuit(status,"pthread_mutex_unlock","epicsMutexUnlock"); } -epicsMutexLockStatus epicsMutexLock(epicsMutexId id) +epicsMutexLockStatus epicsMutexLock(epicsMutexId pmutex) { - mutex *pmutex = (mutex *)id; pthread_t tid = pthread_self(); int status; @@ -155,9 +152,8 @@ epicsMutexLockStatus epicsMutexLock(epicsMutexId id) return(epicsMutexLockOK); } -epicsMutexLockStatus epicsMutexLockWithTimeout(epicsMutexId id, double timeout) +epicsMutexLockStatus epicsMutexLockWithTimeout(epicsMutexId pmutex, double timeout) { - mutex *pmutex = (mutex *)id; pthread_t tid = pthread_self(); struct timespec wakeTime; int status,unlockStatus; @@ -183,9 +179,8 @@ epicsMutexLockStatus epicsMutexLockWithTimeout(epicsMutexId id, double timeout) return(epicsMutexLockError); } -epicsMutexLockStatus epicsMutexTryLock(epicsMutexId id) +epicsMutexLockStatus epicsMutexTryLock(epicsMutexId pmutex) { - mutex *pmutex = (mutex *)id; pthread_t tid = pthread_self(); epicsMutexLockStatus status = epicsMutexLockError; int pthreadStatus; @@ -203,9 +198,8 @@ epicsMutexLockStatus epicsMutexTryLock(epicsMutexId id) return(status); } -void epicsMutexShow(epicsMutexId id,unsigned int level) +void epicsMutexShow(epicsMutexId pmutex,unsigned int level) { - mutex *pmutex = (mutex *)id; printf("ownerTid %p count %d owned %d\n", pmutex->ownerTid,pmutex->count,pmutex->owned); } diff --git a/src/libCom/test/epicsEventTest.cpp b/src/libCom/test/epicsEventTest.cpp index e664d7281..8b2c1571b 100644 --- a/src/libCom/test/epicsEventTest.cpp +++ b/src/libCom/test/epicsEventTest.cpp @@ -55,7 +55,7 @@ static void consumer(void *arg) idSelf,(int)status,time(&tp)); } while(epicsRingPointerGetUsed(pinfo->ring)>=2) { - epicsThreadId message[2]; + epicsRingPointerId message[2]; int i; for(i=0; i<2; i++) { diff --git a/src/libCom/test/epicsMutexTest.cpp b/src/libCom/test/epicsMutexTest.cpp index 71367ce3e..b4a3f3d84 100644 --- a/src/libCom/test/epicsMutexTest.cpp +++ b/src/libCom/test/epicsMutexTest.cpp @@ -144,7 +144,7 @@ extern "C" void epicsMutexTest(int nthreads,int verbose) errVerbose = errVerboseSave; return; } - id = (void **)calloc(nthreads,sizeof(epicsThreadId)); + id = (epicsThreadId *)calloc(nthreads,sizeof(epicsThreadId)); name = (char **)calloc(nthreads,sizeof(char *)); arg = (void **)calloc(nthreads,sizeof(void *)); pinfo = (info **)calloc(nthreads,sizeof(info *));