From 8c8bcc5d1737002a9d153105c16b262d2e201efa Mon Sep 17 00:00:00 2001 From: rpj Date: Tue, 19 Oct 2004 13:24:40 +0000 Subject: Semaphore speedups - alpha, but passes testsuite --- sem_timedwait.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'sem_timedwait.c') diff --git a/sem_timedwait.c b/sem_timedwait.c index e374006..e7fa55c 100644 --- a/sem_timedwait.c +++ b/sem_timedwait.c @@ -189,7 +189,15 @@ sem_timedwait (sem_t * sem, const struct timespec *abstime) #else /* NEED_SEM */ - result = (pthreadCancelableTimedWait ((*sem)->sem, milliseconds)); + if (InterlockedDecrement((LPLONG) &(*sem)->value) < 0) + { + /* Must wait */ + result = pthreadCancelableTimedWait ((*sem)->sem, milliseconds); + if (result != 0) + { + (void) InterlockedIncrement((LPLONG) &(*sem)->value); + } + } #endif -- cgit v1.2.3