fix bug
This commit is contained in:
@@ -117,9 +117,7 @@ epicsEventWaitStatus epicsEventWaitWithTimeout(epicsEventId pevent, double timeo
|
||||
status = pthread_mutex_lock(&pevent->mutex);
|
||||
checkStatusQuit(status,"pthread_mutex_lock","epicsEventWaitWithTimeout");
|
||||
if(!pevent->isFull) {
|
||||
status = convertDoubleToWakeTime(timeout,&wakeTime);
|
||||
checkStatusQuit(unlockStatus,"convertDoubleToWakeTime",
|
||||
"epicsEventWaitWithTimeout");
|
||||
convertDoubleToWakeTime(timeout,&wakeTime);
|
||||
status = pthread_cond_timedwait(
|
||||
&pevent->cond,&pevent->mutex,&wakeTime);
|
||||
}
|
||||
|
||||
@@ -139,9 +139,7 @@ epicsMutexLockStatus epicsMutexLockWithTimeout(epicsMutexId pmutex, double timeo
|
||||
struct timespec wakeTime;
|
||||
int status,unlockStatus;
|
||||
|
||||
status = convertDoubleToWakeTime(timeout,&wakeTime);
|
||||
checkStatusQuit(status,"convertDoubleToWakeTime",
|
||||
"epicsMutexLockWithTimeout");
|
||||
convertDoubleToWakeTime(timeout,&wakeTime);
|
||||
status = pthread_mutex_lock(&pmutex->lock);
|
||||
checkStatusQuit(status,"pthread_mutex_lock","epicsMutexLockWithTimeout");
|
||||
while(pmutex->owned && !pthread_equal(pmutex->ownerTid,tid)) {
|
||||
|
||||
@@ -3,7 +3,14 @@
|
||||
// should move the gettimeofday() proto
|
||||
// into a different header
|
||||
//
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "osiSock.h"
|
||||
#include "cantProceed.h"
|
||||
|
||||
#define epicsExportSharedSymbols
|
||||
#include "epicsTime.h"
|
||||
@@ -61,7 +68,7 @@ int epicsTime_localtime ( const time_t *clock, // X aCC 361
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" epicsShareFunc int epicsShareAPI
|
||||
extern "C" epicsShareFunc void epicsShareAPI
|
||||
convertDoubleToWakeTime(double timeout,struct timespec *wakeTime)
|
||||
{
|
||||
struct timespec wait;
|
||||
@@ -70,7 +77,10 @@ extern "C" epicsShareFunc int epicsShareAPI
|
||||
if(timeout<0.0) timeout = 0.0;
|
||||
else if(timeout>3600.0) timeout = 3600.0;
|
||||
status = clock_gettime(CLOCK_REALTIME,wakeTime);
|
||||
if(status) return epicsTimeERROR;
|
||||
if(status) {
|
||||
printf("clock_gettime failed with error %s\n",strerror(status));
|
||||
cantProceed("convertDoubleToWakeTime");
|
||||
}
|
||||
wait.tv_sec = timeout;
|
||||
wait.tv_nsec = (long)((timeout - (double)wait.tv_sec) * 1e9);
|
||||
wakeTime->tv_sec += wait.tv_sec;
|
||||
@@ -79,5 +89,4 @@ extern "C" epicsShareFunc int epicsShareAPI
|
||||
wakeTime->tv_nsec -= 1000000000L;
|
||||
++wakeTime->tv_sec;
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
epicsShareFunc int epicsShareAPI
|
||||
epicsShareFunc void epicsShareAPI
|
||||
convertDoubleToWakeTime(double timeout,struct timespec *wakeTime);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user