X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fwin32%2FOSThreads.c;h=44db42fef4516e9e4f4fa0e7580481204cf543c4;hb=b2bd63f99d643f6b3eb30bb72bb9ae26d4183252;hp=cb00bd602dfd41e5cef8891c48f094f6cd80506d;hpb=09895ff7da70ae311b8deb47d77d612fe9964403;p=ghc-hetmet.git diff --git a/rts/win32/OSThreads.c b/rts/win32/OSThreads.c index cb00bd6..44db42f 100644 --- a/rts/win32/OSThreads.c +++ b/rts/win32/OSThreads.c @@ -269,6 +269,25 @@ setThreadAffinity (nat n, nat m) // cap N of M } } +typedef BOOL (WINAPI *PCSIO)(HANDLE); + +void +interruptOSThread (OSThreadId id) +{ + HANDLE hdl; + PCSIO pCSIO; + if (!(hdl = OpenThread(THREAD_TERMINATE,FALSE,id))) { + sysErrorBelch("interruptOSThread: OpenThread"); + stg_exit(EXIT_FAILURE); + } + pCSIO = (PCSIO) GetProcAddress(GetModuleHandle(TEXT("Kernel32.dll")), "CancelSynchronousIo"); + if ( NULL != pCSIO ) { + pCSIO(hdl); + } else { + // Nothing to do, unfortunately + } +} + #else /* !defined(THREADED_RTS) */ int