2 * mono-semaphore.c: mono-semaphore functions
5 * Gonzalo Paniagua Javier <gonzalo@novell.com>
7 * (C) 2010 Novell, Inc.
11 #include "utils/mono-semaphore.h"
13 #if defined(HAVE_SEMAPHORE_H) || defined(USE_MACH_SEMA)
14 /* sem_* or semaphore_* functions in use */
16 # define TIMESPEC mach_timespec_t
17 # define WAIT_BLOCK(a,b) semaphore_timedwait (*(a), *(b))
19 # define TIMESPEC struct timespec
20 # define WAIT_BLOCK(a,b) sem_timedwait (a, b)
24 mono_sem_timedwait (MonoSemType *sem, guint32 timeout_ms)
30 return (!sem_trywait (sem));
33 tv.tv_sec = timeout_ms / 1000;
34 tv.tv_nsec = (timeout_ms % 1000) * 1000000;
35 return (!WAIT_BLOCK (sem, &tv));
39 /* Windows or io-layer functions in use */
41 mono_sem_timedwait (MonoSemType *sem, guint32 timeout_ms)
43 return WaitForSingleObjectEx (*sem, timeout_ms, TRUE);