X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fwin32%2FThrIOManager.c;h=50dd4fb95a1a5f99b4cde7e2e094933befccc3ef;hb=c8b84d15cea2869977a1248701f5ffa47e48d33e;hp=76747c2376dc44b2caa8e980741f6ca3b92a90bf;hpb=150cc9e2e4657cc58bd7ec4c15e5cb72f2e1c0f6;p=ghc-hetmet.git diff --git a/rts/win32/ThrIOManager.c b/rts/win32/ThrIOManager.c index 76747c2..50dd4fb 100644 --- a/rts/win32/ThrIOManager.c +++ b/rts/win32/ThrIOManager.c @@ -8,7 +8,7 @@ * ---------------------------------------------------------------------------*/ #include "Rts.h" -#include "ThrIOManager.h" +#include "IOManager.h" #include "Prelude.h" #include @@ -34,7 +34,7 @@ getIOManagerEvent (void) hRes = CreateEvent ( NULL, // no security attrs TRUE, // manual reset FALSE, // initial state, - "IO Manager Event" ); + NULL ); // event name: NULL for private events if (hRes == NULL) { sysErrorBelch("getIOManagerEvent"); stg_exit(EXIT_FAILURE); @@ -67,8 +67,8 @@ readIOManagerEvent (void) #if defined(THREADED_RTS) HsWord32 res; - ACQUIRE_LOCK(&event_buf_mutex); if (io_manager_event != INVALID_HANDLE_VALUE) { + ACQUIRE_LOCK(&event_buf_mutex); if (next_event == 0) { res = 0; // no event to return } else { @@ -80,10 +80,10 @@ readIOManagerEvent (void) } } } + RELEASE_LOCK(&event_buf_mutex); } else { res = 0; } - RELEASE_LOCK(&event_buf_mutex); // debugBelch("readIOManagerEvent: %d\n", res); return res; #else @@ -96,8 +96,8 @@ sendIOManagerEvent (HsWord32 event) { #if defined(THREADED_RTS) // debugBelch("sendIOManagerEvent: %d\n", event); - ACQUIRE_LOCK(&event_buf_mutex); if (io_manager_event != INVALID_HANDLE_VALUE) { + ACQUIRE_LOCK(&event_buf_mutex); if (next_event == EVENT_BUFSIZ) { errorBelch("event buffer overflowed; event dropped"); } else { @@ -107,18 +107,18 @@ sendIOManagerEvent (HsWord32 event) } event_buf[next_event++] = (StgWord32)event; } + RELEASE_LOCK(&event_buf_mutex); } - RELEASE_LOCK(&event_buf_mutex); #endif } -#if defined(THREADED_RTS) void ioManagerWakeup (void) { sendIOManagerEvent(IO_MANAGER_WAKEUP); } +#if defined(THREADED_RTS) void ioManagerDie (void) { @@ -137,7 +137,11 @@ ioManagerStart (void) Capability *cap; if (io_manager_event == INVALID_HANDLE_VALUE) { cap = rts_lock(); +#if defined(mingw32_HOST_OS) && defined(__PIC__) + rts_evalIO(cap,_imp__base_GHCziConc_ensureIOManagerIsRunning_closure,NULL); +#else rts_evalIO(cap,&base_GHCziConc_ensureIOManagerIsRunning_closure,NULL); +#endif rts_unlock(cap); } }