#define INIT_COND_VAR PTHREAD_COND_INITIALIZER
#ifdef LOCK_DEBUG
-#define ACQUIRE_LOCK(mutex) fprintf(stderr, "ACQUIRE_LOCK(0x%p) %s %d\n", mutex,__FILE__,__LINE__); fflush(stderr); pthread_mutex_lock(mutex)
-#define RELEASE_LOCK(mutex) fprintf(stderr, "RELEASE_LOCK(0x%p) %s %d\n", mutex,__FILE__,__LINE__); fflush(stderr); pthread_mutex_unlock(mutex)
+#define ACQUIRE_LOCK(mutex) debugBelch("ACQUIRE_LOCK(0x%p) %s %d\n", mutex,__FILE__,__LINE__); pthread_mutex_lock(mutex)
+#define RELEASE_LOCK(mutex) debugBelch("RELEASE_LOCK(0x%p) %s %d\n", mutex,__FILE__,__LINE__); pthread_mutex_unlock(mutex)
#else
#define ACQUIRE_LOCK(mutex) pthread_mutex_lock(mutex)
#define RELEASE_LOCK(mutex) pthread_mutex_unlock(mutex)
# elif defined(HAVE_WINDOWS_H)
#include <windows.h>
+#include "RtsUtils.h"
+
typedef HANDLE Condition;
typedef HANDLE Mutex;
typedef DWORD OSThreadId;
#define INIT_MUTEX_VAR 0
#define INIT_COND_VAR 0
-#define ACQUIRE_LOCK(mutex) WaitForSingleObject(mutex,INFINITE)
-#define RELEASE_LOCK(mutex) ReleaseMutex(mutex)
+static inline void
+ACQUIRE_LOCK(Mutex *mutex)
+{
+ if (WaitForSingleObject(*mutex,INFINITE) == WAIT_FAILED) {
+ barf("WaitForSingleObject: %d", GetLastError());
+ }
+}
+
+static inline void
+RELEASE_LOCK(Mutex *mutex)
+{
+ if (ReleaseMutex(*mutex) == 0) {
+ barf("ReleaseMutex: %d", GetLastError());
+ }
+}
+
# else
# error "Threads not supported"
# endif