This commit is contained in:
Marty Kraimer
2002-06-14 18:18:50 +00:00
parent 5e1ea4868b
commit 008c9afa18
4 changed files with 15 additions and 10 deletions

View File

@@ -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);
}

View File

@@ -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)) {

View File

@@ -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);
}

View File

@@ -19,7 +19,7 @@
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
epicsShareFunc int epicsShareAPI
epicsShareFunc void epicsShareAPI
convertDoubleToWakeTime(double timeout,struct timespec *wakeTime);
#ifdef __cplusplus
}