X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fwin32%2FThrIOManager.c;h=e2310ef9f383f08554fefa57109ba43d3d31eb48;hb=a26e1e3310f4c92196fe6b4d407f72f3c6824132;hp=76747c2376dc44b2caa8e980741f6ca3b92a90bf;hpb=150cc9e2e4657cc58bd7ec4c15e5cb72f2e1c0f6;p=ghc-hetmet.git diff --git a/rts/win32/ThrIOManager.c b/rts/win32/ThrIOManager.c index 76747c2..e2310ef 100644 --- a/rts/win32/ThrIOManager.c +++ b/rts/win32/ThrIOManager.c @@ -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,8 +107,8 @@ sendIOManagerEvent (HsWord32 event) } event_buf[next_event++] = (StgWord32)event; } + RELEASE_LOCK(&event_buf_mutex); } - RELEASE_LOCK(&event_buf_mutex); #endif } @@ -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); } }