diff options
-rw-r--r-- | ghc/rts/win32/AsyncIO.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/ghc/rts/win32/AsyncIO.c b/ghc/rts/win32/AsyncIO.c index 7efaf14e89..00866963e1 100644 --- a/ghc/rts/win32/AsyncIO.c +++ b/ghc/rts/win32/AsyncIO.c @@ -5,6 +5,7 @@ * (c) sof, 2002-2003. */ #include "Rts.h" +#include "RtsUtils.h" #include <windows.h> #include <stdio.h> #include "Schedule.h" @@ -195,7 +196,6 @@ start: prev = NULL; for(tso = blocked_queue_hd ; tso != END_TSO_QUEUE; tso = tso->link) { switch(tso->why_blocked) { - case BlockedOnDelay: case BlockedOnRead: case BlockedOnWrite: case BlockedOnDoProc: @@ -203,11 +203,9 @@ start: /* Found the thread blocked waiting on request; stodgily fill * in its result block. */ - if (tso->why_blocked != BlockedOnDelay) { - tso->block_info.async_result->len = completedTable[i].len; - tso->block_info.async_result->errCode = completedTable[i].errCode; - } - + tso->block_info.async_result->len = completedTable[i].len; + tso->block_info.async_result->errCode = completedTable[i].errCode; + /* Drop the matched TSO from blocked_queue */ if (prev) { prev->link = tso->link; @@ -225,6 +223,9 @@ start: } break; default: + if (tso->why_blocked != NotBlocked) { + barf("awaitRequests: odd thread state"); + } break; } prev = tso; |