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 --- ptw32_semwait.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'ptw32_semwait.c') diff --git a/ptw32_semwait.c b/ptw32_semwait.c index 38f31f5..2e9c883 100644 --- a/ptw32_semwait.c +++ b/ptw32_semwait.c @@ -83,7 +83,15 @@ ptw32_semwait (sem_t * sem) #else /* NEED_SEM */ - status = WaitForSingleObject ((*sem)->sem, INFINITE); + if (InterlockedDecrement((LPLONG) &(*sem)->value) < 0) + { + /* Must wait */ + status = WaitForSingleObject ((*sem)->sem, INFINITE); + } + else + { + return 0; + } #endif @@ -100,6 +108,9 @@ ptw32_semwait (sem_t * sem) } else { +#ifndef NEED_SEM + (void) InterlockedIncrement((LPLONG) &(*sem)->value); +#endif result = EINVAL; } } -- cgit v1.2.3