X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fwin32%2FThrIOManager.c;h=e62b33d9d31ab49af43732eda9586a95b676f874;hb=2bb3a439c106935d97fae7f7a0b60c21493d1bef;hp=b0da0deee9427273c32bee587d4f5f76f9d79747;hpb=80a766fdb6864eae613962e43ad9eb371e0ce80c;p=ghc-hetmet.git diff --git a/rts/win32/ThrIOManager.c b/rts/win32/ThrIOManager.c index b0da0de..e62b33d 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); @@ -59,20 +59,20 @@ nat next_event; #endif -StgWord32 +HsWord32 readIOManagerEvent (void) { // This function must exist even in non-THREADED_RTS, // see getIOManagerEvent() above. #if defined(THREADED_RTS) - StgWord32 res; + 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 { - res = event_buf[--next_event]; + res = (HsWord32)(event_buf[--next_event]); if (next_event == 0) { if (!ResetEvent(io_manager_event)) { sysErrorBelch("readIOManagerEvent"); @@ -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 @@ -92,12 +92,12 @@ readIOManagerEvent (void) } void -sendIOManagerEvent (StgWord32 event) +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 { @@ -105,10 +105,10 @@ sendIOManagerEvent (StgWord32 event) sysErrorBelch("sendIOManagerEvent"); stg_exit(EXIT_FAILURE); } - event_buf[next_event++] = 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); } }