diff --git a/src/ca/iocinf.h b/src/ca/iocinf.h index e10f5e675..4be4d7de5 100644 --- a/src/ca/iocinf.h +++ b/src/ca/iocinf.h @@ -44,7 +44,7 @@ #include "tsFreeList.h" #include "tsDLList.h" #include "osiSock.h" -#include "osiSem.h" +#include "epicsEvent.h" #include "osiThread.h" #include "osiTimer.h" #include "epicsMutex.h" @@ -611,7 +611,7 @@ private: char recvBuf [MAX_UDP_RECV]; ELLLIST dest; threadId recvThreadId; - semBinaryId recvThreadExitSignal; + epicsEventId recvThreadExitSignal; unsigned nBytesInXmitBuf; SOCKET sock; unsigned short repeaterPort; @@ -773,10 +773,10 @@ private: void *pCurData; unsigned minorProtocolVersion; iiu_conn_state state; - semBinaryId sendThreadFlushSignal; - semBinaryId recvThreadRingBufferSpaceAvailableSignal; - semBinaryId sendThreadExitSignal; - semBinaryId recvThreadExitSignal; + epicsEventId sendThreadFlushSignal; + epicsEventId recvThreadRingBufferSpaceAvailableSignal; + epicsEventId sendThreadExitSignal; + epicsEventId recvThreadExitSignal; SOCKET sock; unsigned contigRecvMsgCount; bool fullyConstructedFlag; diff --git a/src/ca/tcpiiu.cpp b/src/ca/tcpiiu.cpp index 191697773..402325570 100644 --- a/src/ca/tcpiiu.cpp +++ b/src/ca/tcpiiu.cpp @@ -98,7 +98,7 @@ extern "C" void cacSendThreadTCP ( void *pParam ) while ( true ) { - semBinaryMustTake ( piiu->sendThreadFlushSignal ); + epicsEventMustWait ( piiu->sendThreadFlushSignal ); if ( piiu->state != iiu_connected ) { break; @@ -160,7 +160,7 @@ extern "C" void cacSendThreadTCP ( void *pParam ) } } - semBinaryGive ( piiu->sendThreadExitSignal ); + epicsEventSignal ( piiu->sendThreadExitSignal ); } unsigned tcpiiu::sendBytes ( const void *pBuf, @@ -313,15 +313,15 @@ extern "C" void cacRecvThreadTCP ( void *pParam ) tid = threadCreate ( "CAC-TCP-send", priorityOfSend, threadGetStackSize ( threadStackMedium ), cacSendThreadTCP, piiu ); if ( ! tid ) { - semBinaryGive ( piiu->recvThreadExitSignal ); - semBinaryGive ( piiu->sendThreadExitSignal ); + epicsEventSignal ( piiu->recvThreadExitSignal ); + epicsEventSignal ( piiu->sendThreadExitSignal ); piiu->cleanShutdown (); return; } } else { - semBinaryGive ( piiu->recvThreadExitSignal ); - semBinaryGive ( piiu->sendThreadExitSignal ); + epicsEventSignal ( piiu->recvThreadExitSignal ); + epicsEventSignal ( piiu->sendThreadExitSignal ); piiu->cleanShutdown (); return; } @@ -334,7 +334,7 @@ extern "C" void cacRecvThreadTCP ( void *pParam ) nBytes = piiu->recvQue.occupiedBytes (); } if ( nBytes >= 0x4000 ) { - semBinaryMustTake ( piiu->recvThreadRingBufferSpaceAvailableSignal ); + epicsEventMustWait ( piiu->recvThreadRingBufferSpaceAvailableSignal ); } else { comBuf * pComBuf = new comBuf; @@ -358,7 +358,7 @@ extern "C" void cacRecvThreadTCP ( void *pParam ) } } - semBinaryGive ( piiu->recvThreadExitSignal ); + epicsEventSignal ( piiu->recvThreadExitSignal ); } // @@ -387,34 +387,34 @@ tcpiiu::tcpiiu ( cac &cac, double connectionTimeout, osiTimerQueue &timerQueue ) { this->addr.sa.sa_family = AF_UNSPEC; - this->sendThreadExitSignal = semBinaryCreate (semEmpty); + this->sendThreadExitSignal = epicsEventCreate ( epicsEventEmpty ); if ( ! this->sendThreadExitSignal ) { ca_printf ("CA: unable to create CA client send thread exit semaphore\n"); this->fullyConstructedFlag = false; return; } - this->recvThreadExitSignal = semBinaryCreate (semEmpty); + this->recvThreadExitSignal = epicsEventCreate ( epicsEventEmpty ); if ( ! this->recvThreadExitSignal ) { ca_printf ("CA: unable to create CA client send thread exit semaphore\n"); - semBinaryDestroy (this->sendThreadExitSignal); + epicsEventDestroy (this->sendThreadExitSignal); this->fullyConstructedFlag = false; return; } - this->sendThreadFlushSignal = semBinaryCreate ( semEmpty ); + this->sendThreadFlushSignal = epicsEventCreate ( epicsEventEmpty ); if ( ! this->sendThreadFlushSignal ) { ca_printf ("CA: unable to create sendThreadFlushSignal object\n"); - semBinaryDestroy (this->sendThreadExitSignal); + epicsEventDestroy (this->sendThreadExitSignal); this->fullyConstructedFlag = false; return; } - this->recvThreadRingBufferSpaceAvailableSignal = semBinaryCreate ( semEmpty ); + this->recvThreadRingBufferSpaceAvailableSignal = epicsEventCreate ( epicsEventEmpty ); if ( ! this->recvThreadRingBufferSpaceAvailableSignal ) { ca_printf ("CA: unable to create recvThreadRingBufferSpaceAvailableSignal object\n"); - semBinaryDestroy (this->sendThreadExitSignal); - semBinaryDestroy (this->sendThreadFlushSignal); + epicsEventDestroy (this->sendThreadExitSignal); + epicsEventDestroy (this->sendThreadFlushSignal); this->fullyConstructedFlag = false; return; } @@ -622,8 +622,8 @@ void tcpiiu::cleanShutdown () this->state = iiu_disconnected; } } - semBinaryGive ( this->sendThreadFlushSignal ); - semBinaryGive ( this->recvThreadRingBufferSpaceAvailableSignal ); + epicsEventSignal ( this->sendThreadFlushSignal ); + epicsEventSignal ( this->recvThreadRingBufferSpaceAvailableSignal ); this->pCAC ()->signalRecvActivity (); } @@ -661,8 +661,8 @@ void tcpiiu::forcedShutdown () } } - semBinaryGive ( this->sendThreadFlushSignal ); - semBinaryGive ( this->recvThreadRingBufferSpaceAvailableSignal ); + epicsEventSignal ( this->sendThreadFlushSignal ); + epicsEventSignal ( this->recvThreadRingBufferSpaceAvailableSignal ); this->pCAC ()->signalRecvActivity (); } @@ -679,13 +679,13 @@ void tcpiiu::disconnect () // wait for send thread to exit static const double shutdownDelay = 15.0; - semTakeStatus semStat; + epicsEventWaitStatus semStat; while ( true ) { - semStat = semBinaryTakeTimeout ( this->sendThreadExitSignal, shutdownDelay ); - if ( semStat == semTakeOK ) { + semStat = epicsEventWaitWithTimeout ( this->sendThreadExitSignal, shutdownDelay ); + if ( semStat == epicsEventWaitOK ) { break; } - assert ( semStat == semTakeTimeout ); + assert ( semStat == epicsEventWaitTimeout ); if ( ! this->sockCloseCompleted ) { printf ( "Gave up waiting for \"shutdown()\" to force send thread to exit after %f sec\n", shutdownDelay); @@ -703,11 +703,11 @@ void tcpiiu::disconnect () // wait for recv thread to exit while ( true ) { - semStat = semBinaryTakeTimeout ( this->recvThreadExitSignal, shutdownDelay ); - if ( semStat == semTakeOK ) { + semStat = epicsEventWaitWithTimeout ( this->recvThreadExitSignal, shutdownDelay ); + if ( semStat == epicsEventWaitOK ) { break; } - assert ( semStat == semTakeTimeout ); + assert ( semStat == epicsEventWaitTimeout ); if ( ! this->sockCloseCompleted ) { printf ( "Gave up waiting for \"shutdown()\" to force receive thread to exit after %f sec\n", shutdownDelay); @@ -769,10 +769,10 @@ tcpiiu::~tcpiiu () return; } - semBinaryDestroy ( this->sendThreadExitSignal ); - semBinaryDestroy ( this->recvThreadExitSignal ); - semBinaryDestroy ( this->sendThreadFlushSignal ); - semBinaryDestroy ( this->recvThreadRingBufferSpaceAvailableSignal ); + epicsEventDestroy ( this->sendThreadExitSignal ); + epicsEventDestroy ( this->recvThreadExitSignal ); + epicsEventDestroy ( this->sendThreadFlushSignal ); + epicsEventDestroy ( this->recvThreadRingBufferSpaceAvailableSignal ); if ( this->pHostNameCache ) { this->pHostNameCache->destroy (); @@ -855,13 +855,13 @@ void tcpiiu::show ( unsigned level ) const if ( level > 3u ) { printf ( "\tvirtual circuit socket identifier %d\n", this->sock ); printf ( "\tsend thread flush signal:\n" ); - semBinaryShow ( this->sendThreadFlushSignal, level-3u ); + epicsEventShow ( this->sendThreadFlushSignal, level-3u ); printf ( "\trecv thread buffer space available signal:\n" ); - semBinaryShow ( this->recvThreadRingBufferSpaceAvailableSignal, level-3u ); + epicsEventShow ( this->recvThreadRingBufferSpaceAvailableSignal, level-3u ); printf ( "\tsend thread exit signal:\n" ); - semBinaryShow ( this->sendThreadExitSignal, level-3u ); + epicsEventShow ( this->sendThreadExitSignal, level-3u ); printf ( "\trecv thread exit signal:\n" ); - semBinaryShow ( this->recvThreadExitSignal, level-3u ); + epicsEventShow ( this->recvThreadExitSignal, level-3u ); printf ( "\tfully constructed bool %u\n", this->fullyConstructedFlag ); printf ("\techo pending bool = %u\n", this->echoRequestPending ); printf ("\tflush pending bool = %u\n", this->flushPending ); @@ -1376,7 +1376,7 @@ void tcpiiu::processIncoming () } } - semBinaryGive ( this->recvThreadRingBufferSpaceAvailableSignal ); + epicsEventSignal ( this->recvThreadRingBufferSpaceAvailableSignal ); } /* diff --git a/src/ca/tcpiiu_IL.h b/src/ca/tcpiiu_IL.h index e3568a691..f40aae4b1 100644 --- a/src/ca/tcpiiu_IL.h +++ b/src/ca/tcpiiu_IL.h @@ -51,7 +51,7 @@ inline void tcpiiu::flush () epicsAutoMutex autoMutex ( this->mutex ); this->flushPending = true; } - semBinaryGive ( this->sendThreadFlushSignal ); + epicsEventSignal ( this->sendThreadFlushSignal ); } inline bool tcpiiu::ca_v44_ok () const diff --git a/src/ca/udpiiu.cpp b/src/ca/udpiiu.cpp index e0cd624ab..c15db0be9 100644 --- a/src/ca/udpiiu.cpp +++ b/src/ca/udpiiu.cpp @@ -125,7 +125,7 @@ extern "C" void cacRecvThreadUDP (void *pParam) piiu->recvMsg (); } while ( ! piiu->shutdownCmd ); - semBinaryGive ( piiu->recvThreadExitSignal ); + epicsEventSignal ( piiu->recvThreadExitSignal ); } /* @@ -395,7 +395,7 @@ udpiiu::udpiiu ( cac &cac ) : this->nBytesInXmitBuf = 0u; - this->recvThreadExitSignal = semBinaryCreate ( semEmpty ); + this->recvThreadExitSignal = epicsEventMustCreate ( epicsEventEmpty ); if ( ! this->recvThreadExitSignal ) { socket_close ( this->sock ); throwWithLocation ( noMemory () ); @@ -425,7 +425,7 @@ udpiiu::udpiiu ( cac &cac ) : threadGetStackSize (threadStackMedium), cacRecvThreadUDP, this ); if ( this->recvThreadId == 0 ) { ca_printf ("CA: unable to create UDP receive thread\n"); - semBinaryDestroy (this->recvThreadExitSignal); + epicsEventDestroy (this->recvThreadExitSignal); socket_close (this->sock); throwWithLocation ( noMemory () ); } @@ -442,7 +442,7 @@ udpiiu::~udpiiu () // closes the udp socket and waits for its recv thread to exit this->shutdown (); - semBinaryDestroy ( this->recvThreadExitSignal ); + epicsEventDestroy ( this->recvThreadExitSignal ); ellFree ( &this->dest ); @@ -510,7 +510,7 @@ void udpiiu::shutdown () } } // wait for recv threads to exit - semBinaryMustTake ( this->recvThreadExitSignal ); + epicsEventMustWait ( this->recvThreadExitSignal ); } } @@ -846,7 +846,7 @@ void udpiiu::show ( unsigned level ) const printf ("\tbytes in xmit buffer %u\n", this->nBytesInXmitBuf ); printf ("\tshut down command bool %u\n", this->shutdownCmd ); printf ( "\trecv thread exit signal:\n" ); - semBinaryShow ( this->recvThreadExitSignal, level-3u ); + epicsEventShow ( this->recvThreadExitSignal, level-3u ); } } diff --git a/src/libCom/logClient/logClient.c b/src/libCom/logClient/logClient.c index d5efd52b2..cbb3c63d2 100644 --- a/src/libCom/logClient/logClient.c +++ b/src/libCom/logClient/logClient.c @@ -44,7 +44,8 @@ #define epicsExportSharedSymbols #include "dbDefs.h" -#include "osiSem.h" +#include "epicsEvent.h" +#include "epicsMutex.h" #include "osiThread.h" #include "osiSock.h" #include "epicsAssert.h" @@ -70,15 +71,15 @@ typedef struct { ELLNODE node; /* must be the first field in struct */ struct sockaddr_in addr; FILE *file; - semMutexId mutex; + epicsMutexId mutex; SOCKET sock; unsigned connectTries; unsigned connectCount; unsigned connectReset; }logClient; -LOCAL semMutexId logClientGlobalMutex; -LOCAL semBinaryId logClientGlobalSignal; +LOCAL epicsMutexId logClientGlobalMutex; +LOCAL epicsEventId logClientGlobalSignal; LOCAL ELLLIST logClientList; LOCAL threadId logClientThreadId; LOCAL logClient *pLogClientDefaultClient; @@ -141,7 +142,7 @@ LOCAL void logClientReset (logClient *pClient) /* * mutex on */ - semMutexMustTake (pClient->mutex); + epicsMutexMustLock (pClient->mutex); /* * close any preexisting connection to the log server @@ -168,12 +169,12 @@ LOCAL void logClientReset (logClient *pClient) /* * mutex off */ - semMutexGive (pClient->mutex); + epicsMutexUnlock (pClient->mutex); /* * wake up the watchdog task */ - semBinaryGive (logClientGlobalSignal); + epicsEventSignal (logClientGlobalSignal); # ifdef DEBUG fprintf (stderr, "done\n"); @@ -189,11 +190,11 @@ LOCAL void logClientDestroy (logClient *pClient) /* * mutex on (and left on) */ - semMutexMustTake (pClient->mutex); + epicsMutexMustLock (pClient->mutex); logClientReset (pClient); - semMutexDestroy (pClient->mutex); + epicsMutexDestroy (pClient->mutex); free (pClient); } @@ -212,11 +213,11 @@ LOCAL void logClientShutdown (void) */ # ifndef vxWorks logClient *pClient; - semMutexMustTake (logClientGlobalMutex); + epicsMutexMustLock (logClientGlobalMutex); while ( ( pClient = (logClient *) ellGet (&logClientList) ) ) { logClientDestroy (pClient); } - semMutexGive (logClientGlobalMutex); + epicsMutexUnlock (logClientGlobalMutex); # endif } @@ -235,7 +236,7 @@ LOCAL void logClientSendMessageInternal (logClientId id, const char *message) /* * mutex on */ - semMutexMustTake (pClient->mutex); + epicsMutexMustLock (pClient->mutex); if (pClient->file) { status = fprintf (pClient->file, "%s", message); @@ -252,7 +253,7 @@ LOCAL void logClientSendMessageInternal (logClientId id, const char *message) /* * mutex off */ - semMutexGive (pClient->mutex); + epicsMutexUnlock (pClient->mutex); return; } @@ -277,7 +278,7 @@ LOCAL void logClientMakeSock (logClient *pClient) fprintf (stderr, "log client: creating socket..."); # endif - semMutexMustTake (pClient->mutex); + epicsMutexMustLock (pClient->mutex); /* * allocate a socket @@ -286,7 +287,7 @@ LOCAL void logClientMakeSock (logClient *pClient) if (pClient->sock == INVALID_SOCKET){ fprintf (stderr, "log client: no socket error %s\n", SOCKERRSTR(SOCKERRNO)); - semMutexGive (pClient->mutex); + epicsMutexUnlock (pClient->mutex); return; } @@ -297,11 +298,11 @@ LOCAL void logClientMakeSock (logClient *pClient) __FILE__, __LINE__, SOCKERRSTR(SOCKERRNO)); socket_close (pClient->sock); pClient->sock = INVALID_SOCKET; - semMutexGive (pClient->mutex); + epicsMutexUnlock (pClient->mutex); return; } - semMutexGive (pClient->mutex); + epicsMutexUnlock (pClient->mutex); # ifdef DEBUG fprintf (stderr, "done\n"); @@ -436,9 +437,9 @@ LOCAL void logClientConnect (logClient *pClient) */ LOCAL void logRestart (void *pPrivate) { - semTakeStatus semStatus; - logClient *pClient; - unsigned ioPending; + epicsEventWaitStatus semStatus; + logClient *pClient; + unsigned ioPending; /* * roll the local port forward so that we dont collide @@ -451,10 +452,10 @@ LOCAL void logRestart (void *pPrivate) while (1) { ioPending = 0; - semStatus = semBinaryTakeTimeout (logClientGlobalSignal, LOG_RESTART_DELAY); - assert ( semStatus==semTakeOK || semStatus==semTakeTimeout ); + semStatus = epicsEventWaitWithTimeout (logClientGlobalSignal, LOG_RESTART_DELAY); + assert ( semStatus==epicsEventWaitOK || semStatus==epicsEventWaitTimeout ); - semMutexMustTake (logClientGlobalMutex); + epicsMutexMustLock (logClientGlobalMutex); for ( pClient = (logClient *) ellFirst (&logClientList); pClient; pClient = (logClient *) ellNext(&pClient->node) ) { @@ -485,7 +486,7 @@ LOCAL void logRestart (void *pPrivate) logClientReset (pClient); } } - semMutexGive (logClientGlobalMutex); + epicsMutexUnlock (logClientGlobalMutex); } } @@ -496,29 +497,28 @@ LOCAL void logClientGlobalInit () { static const unsigned logRestartStackSize = 0x2000; - logClientGlobalMutex = semMutexCreate (); + logClientGlobalMutex = epicsMutexCreate (); if (!logClientGlobalMutex) { fprintf(stderr, "log client: Unable to create log client global mutex\n"); return; } - semMutexMustTake (logClientGlobalMutex); + epicsMutexMustLock (logClientGlobalMutex); ellInit (&logClientList); - logClientGlobalSignal = semBinaryCreate (0); + logClientGlobalSignal = epicsEventCreate (0); if(!logClientGlobalSignal){ - semMutexDestroy (logClientGlobalMutex); + epicsMutexDestroy (logClientGlobalMutex); logClientGlobalMutex = NULL; return; } - logClientThreadId = threadCreate ("logRestart", threadPriorityLow, logRestartStackSize, logRestart, 0); if (logClientThreadId==NULL) { - semMutexDestroy (logClientGlobalMutex); + epicsMutexDestroy (logClientGlobalMutex); logClientGlobalMutex = NULL; - semMutexDestroy (logClientGlobalSignal); + epicsMutexDestroy (logClientGlobalSignal); logClientGlobalSignal = NULL; fprintf(stderr, "log client: unable to start log client connection watch dog thread\n"); return; @@ -535,7 +535,7 @@ LOCAL void logClientGlobalInit () # else atexit (logClientShutdown); # endif - semMutexGive (logClientGlobalMutex); + epicsMutexUnlock (logClientGlobalMutex); } /* @@ -570,7 +570,7 @@ epicsShareFunc logClientId epicsShareAPI logClientInit () return NULL; } - pClient->mutex = semMutexCreate (); + pClient->mutex = epicsMutexCreate (); if (!pClient->mutex) { free (pClient); return NULL; @@ -579,16 +579,16 @@ epicsShareFunc logClientId epicsShareAPI logClientInit () pClient->sock = INVALID_SOCKET; pClient->file = NULL; - semMutexMustTake (logClientGlobalMutex); + epicsMutexMustLock (logClientGlobalMutex); ellAdd (&logClientList, &pClient->node); - semMutexGive (logClientGlobalMutex); + epicsMutexUnlock (logClientGlobalMutex); /* * attempt to block for the connect */ while (pClient->file==NULL) { - semBinaryGive (logClientGlobalSignal); + epicsEventSignal (logClientGlobalSignal); threadSleep (50e-3); @@ -596,9 +596,9 @@ epicsShareFunc logClientId epicsShareAPI logClientInit () if (connectTries>=maxConnectTries) { char name[64]; - semMutexMustTake (logClientGlobalMutex); + epicsMutexMustLock (logClientGlobalMutex); ipAddrToDottedIP (&pClient->addr, name, sizeof(name)); - semMutexGive (logClientGlobalMutex); + epicsMutexUnlock (logClientGlobalMutex); break; } diff --git a/src/libCom/osi/os/default/osdSock.c b/src/libCom/osi/os/default/osdSock.c index 3b75849ae..71cf4c384 100644 --- a/src/libCom/osi/os/default/osdSock.c +++ b/src/libCom/osi/os/default/osdSock.c @@ -37,7 +37,7 @@ #define epicsExportSharedSymbols #include "osiThread.h" -#include "osiSem.h" +#include "epicsEvent.h" #include "osiSock.h" #include "epicsAssert.h" #include "errlog.h" @@ -45,21 +45,21 @@ /* * Protect some routines which are not thread-safe */ -static semMutexId infoMutex; +static epicsMutexId infoMutex; static void createInfoMutex (void *unused) { - infoMutex = semMutexMustCreate (); + infoMutex = epicsMutexMustCreate (); } static void lockInfo (void) { static threadOnceId infoMutexOnceFlag = OSITHREAD_ONCE_INIT; threadOnce (&infoMutexOnceFlag, createInfoMutex, NULL); - semMutexMustTake (infoMutex); + epicsMutexMustLock (infoMutex); } static void unlockInfo (void) { - semMutexGive (infoMutex); + epicsMutexUnlock (infoMutex); } /* diff --git a/src/libCom/osi/osiThread.h b/src/libCom/osi/osiThread.h index 48a994c7e..fd4cee5fa 100644 --- a/src/libCom/osi/osiThread.h +++ b/src/libCom/osi/osiThread.h @@ -8,7 +8,6 @@ extern "C" { #include #include "shareLib.h" -#include "osiSem.h" typedef void (*THREADFUNC)(void *parm); diff --git a/src/libCom/test/ringPointerTest.c b/src/libCom/test/ringPointerTest.c index 0c81abcde..d92ea36a3 100644 --- a/src/libCom/test/ringPointerTest.c +++ b/src/libCom/test/ringPointerTest.c @@ -19,6 +19,7 @@ of this distribution. #include "osiThread.h" #include "epicsRingPointer.h" #include "errlog.h" +#include "osiSem.h" #define ringSize 10 diff --git a/src/libCom/test/semBinaryTest.c b/src/libCom/test/semBinaryTest.c index 48f7cad3e..e4f7b4f44 100644 --- a/src/libCom/test/semBinaryTest.c +++ b/src/libCom/test/semBinaryTest.c @@ -19,6 +19,7 @@ of this distribution. #include "osiThread.h" #include "epicsRingPointer.h" #include "errlog.h" +#include "osiSem.h" typedef struct info { diff --git a/src/libCom/test/semMutexTest.c b/src/libCom/test/semMutexTest.c index d9d34eb5d..135838178 100644 --- a/src/libCom/test/semMutexTest.c +++ b/src/libCom/test/semMutexTest.c @@ -18,7 +18,7 @@ of this distribution. #include "osiThread.h" #include "errlog.h" - +#include "osiSem.h" typedef struct info { int threadnum;