2010-05-05 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / utils / mono-semaphore.h
index 04748a813b82e265f6d53ef09d192f35de02146c..d6be806efe5a2b14a52129a46b72745490d5413a 100644 (file)
 #    include <mach/semaphore.h>
 typedef semaphore_t MonoSemType;
 #    define MONO_SEM_INIT(addr,value) semaphore_create (current_task (), (addr), SYNC_POLICY_FIFO, (value))
-#    define MONO_SEM_WAIT(sem) mono_sem_wait ((sem))
-#    define MONO_SEM_POST(sem) mono_sem_post (*(sem))
 #    define MONO_SEM_DESTROY(sem) semaphore_destroy (current_task (), *(sem))
 #  else
 typedef sem_t MonoSemType;
 #    define MONO_SEM_INIT(addr,value) sem_init ((addr), 0, (value))
-#    define MONO_SEM_WAIT(sem) mono_sem_wait ((sem))
-#    define MONO_SEM_POST(sem) mono_sem_post ((sem))
 #    define MONO_SEM_DESTROY(sem) sem_destroy ((sem))
 #  endif
-#elif defined(HOST_WIN32) || defined(_WAPI_SEMAPHORES_H)
+#else
 #  define MONO_HAS_SEMAPHORES
 typedef HANDLE MonoSemType;
 #    define MONO_SEM_INIT(addr,initial) do {*(addr) = CreateSemaphore ( NULL,(initial),0x7FFFFFFF,NULL);} while(0)
-#    define MONO_SEM_WAIT(sem) mono_sem_wait (sem)
-#    define MONO_SEM_POST(sem) mono_sem_post (sem)
 #    define MONO_SEM_DESTROY(sem) CloseHandle (*(sem))
 #endif
 
-#define MONO_SEM_TIMEDWAIT(sem, timeout_ms) mono_sem_timedwait ((sem), (timeout_ms)) 
+#define MONO_SEM_WAIT(sem) MONO_SEM_WAIT_ALERTABLE(sem, FALSE)
+#define MONO_SEM_WAIT_ALERTABLE(sem,alertable) mono_sem_wait ((sem), alertable)
+#define MONO_SEM_POST(sem) mono_sem_post ((sem))
+#define MONO_SEM_TIMEDWAIT(sem, timeout_ms) MONO_SEM_TIMEDWAIT_ALERTABLE(sem, timeout_ms, FALSE)
+#define MONO_SEM_TIMEDWAIT_ALERTABLE(sem, timeout_ms, alertable) mono_sem_timedwait ((sem), (timeout_ms), alertable) 
 
 G_BEGIN_DECLS
 
-int mono_sem_wait (MonoSemType *sem);
-int mono_sem_timedwait (MonoSemType *sem, guint32 timeout_ms);
+int mono_sem_wait (MonoSemType *sem, gboolean alertable);
+int mono_sem_timedwait (MonoSemType *sem, guint32 timeout_ms, gboolean alertable);
 int mono_sem_post (MonoSemType *sem);
 
 G_END_DECLS