Commit 0ee85183 authored by Ian Lynagh's avatar Ian Lynagh
Browse files

Fix the threaded RTS on Windows

When calling EnterCriticalSection and LeaveCriticalSection from C--
code, we go via wrappers which use ccall (rather than stdcall).
parent 00658681
......@@ -82,8 +82,11 @@ typedef pthread_key_t ThreadLocalKey;
#if CMINUSMINUS
#define ACQUIRE_LOCK(mutex) EnterCriticalSection(mutex)
#define RELEASE_LOCK(mutex) LeaveCriticalSection(mutex)
/* We jump through a hoop here to get a CCall EnterCriticalSection
and LeaveCriticalSection, as that's what C-- wants. */
#define ACQUIRE_LOCK(mutex) CCallEnterCriticalSection(mutex)
#define RELEASE_LOCK(mutex) CCallLeaveCriticalSection(mutex)
#define ASSERT_LOCK_HELD(mutex) /* nothing */
#else
......
......@@ -13,6 +13,7 @@
#if defined(THREADED_RTS)
#include "OSThreads.h"
#include "RtsUtils.h"
#include <windows.h>
/* For reasons not yet clear, the entire contents of process.h is protected
* by __STRICT_ANSI__ not being defined.
......@@ -231,6 +232,14 @@ forkOS_createThread ( HsStablePtr entry )
(unsigned*)&pId) == 0);
}
void CCallEnterCriticalSection(LPCRITICAL_SECTION s) {
EnterCriticalSection(s);
}
void CCallLeaveCriticalSection(LPCRITICAL_SECTION s) {
LeaveCriticalSection(s);
}
#else /* !defined(THREADED_RTS) */
int
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment