X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2FOSThreads.h;h=d79b9affc7586ab64dc290f28a5d3d5e538723d2;hb=ae627c58d2245c20e990c573721a6b22f1d0abe2;hp=32429b5794ce7de58ca249b291e4293b1c3bc0dc;hpb=16ed3e3cd3ba05ae7222f8da2c80f8294540817d;p=ghc-hetmet.git diff --git a/includes/OSThreads.h b/includes/OSThreads.h index 32429b5..d79b9af 100644 --- a/includes/OSThreads.h +++ b/includes/OSThreads.h @@ -16,8 +16,8 @@ #if CMINUSMINUS -#define ACQUIRE_LOCK(mutex) pthread_mutex_lock(mutex) -#define RELEASE_LOCK(mutex) pthread_mutex_unlock(mutex) +#define ACQUIRE_LOCK(mutex) foreign "C" pthread_mutex_lock(mutex) +#define RELEASE_LOCK(mutex) foreign "C" pthread_mutex_unlock(mutex) #define ASSERT_LOCK_HELD(mutex) /* nothing */ #else @@ -79,6 +79,18 @@ typedef pthread_key_t ThreadLocalKey; #endif // CMINUSMINUS # elif defined(HAVE_WINDOWS_H) + +#if CMINUSMINUS + +/* We jump through a hoop here to get a CCall EnterCriticalSection + and LeaveCriticalSection, as that's what C-- wants. */ + +#define ACQUIRE_LOCK(mutex) foreign "stdcall" EnterCriticalSection(mutex) +#define RELEASE_LOCK(mutex) foreign "stdcall" LeaveCriticalSection(mutex) +#define ASSERT_LOCK_HELD(mutex) /* nothing */ + +#else + #include typedef HANDLE Condition; @@ -143,6 +155,8 @@ typedef HANDLE Mutex; #define ASSERT_LOCK_HELD(mutex) /* nothing */ #endif +#endif // CMINUSMINUS + # else # error "Threads not supported" # endif