From 6060f2eaaaf40f8ac71c17f19b4efc09ef85b1fb Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 24 May 2012 14:31:27 -0400 Subject: [PATCH] Only ignore errors when there is an error reporting path can't report from thread free mutex unlock or implicit thread creation --- src/libCom/osi/os/default/osdMessageQueue.cpp | 17 +++++------------ src/libCom/osi/os/posix/osdMutex.c | 2 +- src/libCom/osi/os/posix/osdThread.c | 13 ++++--------- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/src/libCom/osi/os/default/osdMessageQueue.cpp b/src/libCom/osi/os/default/osdMessageQueue.cpp index 2e5343bbc..5ef7a0938 100644 --- a/src/libCom/osi/os/default/osdMessageQueue.cpp +++ b/src/libCom/osi/os/default/osdMessageQueue.cpp @@ -160,8 +160,7 @@ mySend(epicsMessageQueueId pmsg, void *message, unsigned int size, bool wait, bo /* * See if message can be sent */ - if(epicsMutexLock(pmsg->mutex)!=epicsMutexLockOK) - return -1; + epicsMutexMustLock(pmsg->mutex); if ((pmsg->numberOfSendersWaiting > 0) || (pmsg->full && (ellFirst(&pmsg->receiveQueue) == NULL))) { @@ -194,10 +193,7 @@ mySend(epicsMessageQueueId pmsg, void *message, unsigned int size, bool wait, bo else epicsEventWait(threadNode.evp->event); - if(epicsMutexLock(pmsg->mutex)!=epicsMutexLockOK){ - freeEventNode(threadNode.evp); - return -1; - } + epicsMutexMustLock(pmsg->mutex); if(!threadNode.eventSent) ellDelete(&pmsg->sendQueue, &threadNode.link); @@ -270,8 +266,8 @@ myReceive(epicsMessageQueueId pmsg, void *message, unsigned int size, bool wait, /* * If there's a message on the queue, copy it */ - if(epicsMutexLock(pmsg->mutex)!=epicsMutexLockOK) - return -1; + epicsMutexMustLock(pmsg->mutex); + myOutPtr = (char *)pmsg->outPtr; if ((myOutPtr != pmsg->inPtr) || pmsg->full) { @@ -341,10 +337,7 @@ myReceive(epicsMessageQueueId pmsg, void *message, unsigned int size, bool wait, else epicsEventWait(threadNode.evp->event); - if(epicsMutexLock(pmsg->mutex)!=epicsMutexLockOK){ - freeEventNode(threadNode.evp); - return -1; - } + epicsMutexMustLock(pmsg->mutex); if(!threadNode.eventSent) ellDelete(&pmsg->receiveQueue, &threadNode.link); diff --git a/src/libCom/osi/os/posix/osdMutex.c b/src/libCom/osi/os/posix/osdMutex.c index ec1e7097c..44a3c4d6e 100644 --- a/src/libCom/osi/os/posix/osdMutex.c +++ b/src/libCom/osi/os/posix/osdMutex.c @@ -245,7 +245,7 @@ void epicsMutexOsdUnlock(struct epicsMutexOSD * pmutex) pmutex->owned = 0; pmutex->ownerTid = 0; status = pthread_cond_signal(&pmutex->waitToBeOwner); - checkStatus(status, "pthread_cond_signal epicsMutexOsdUnlock"); + checkStatusQuit(status, "pthread_cond_signal epicsMutexOsdUnlock", "epicsMutexOsdUnlock"); } status = pthread_mutex_unlock(&pmutex->lock); diff --git a/src/libCom/osi/os/posix/osdThread.c b/src/libCom/osi/os/posix/osdThread.c index e5ad7b601..02232c567 100644 --- a/src/libCom/osi/os/posix/osdThread.c +++ b/src/libCom/osi/os/posix/osdThread.c @@ -199,17 +199,13 @@ static void free_threadInfo(epicsThreadOSD *pthreadInfo) int status; status = mutexLock(&listLock); - checkStatus(status,"pthread_mutex_lock free_threadInfo"); - if(status) - return; + checkStatusQuit(status,"pthread_mutex_lock","free_threadInfo"); if(pthreadInfo->isOnThreadList) ellDelete(&pthreadList,&pthreadInfo->node); status = pthread_mutex_unlock(&listLock); - checkStatus(status,"pthread_mutex_unlock free_threadInfo"); + checkStatusQuit(status,"pthread_mutex_unlock","free_threadInfo"); epicsEventDestroy(pthreadInfo->suspendEvent); status = pthread_attr_destroy(&pthreadInfo->attr); - checkStatus(status,"pthread_attr_destroy free_threadInfo"); - if(status) - return; + checkStatusQuit(status,"pthread_attr_destroy","free_threadInfo"); free(pthreadInfo); } @@ -437,8 +433,7 @@ static epicsThreadOSD *createImplicit(void) tid = pthread_self(); sprintf(name, "non-EPICS_%d", (int)tid); pthreadInfo = create_threadInfo(name); - if(!pthreadInfo) - return NULL; + assert(pthreadInfo); pthreadInfo->tid = tid; pthreadInfo->osiPriority = 0; #if defined (_POSIX_THREAD_PRIORITY_SCHEDULING)