X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fwin32%2FIOManager.c;h=c9a759fffbce2655f971f220272fb409ed7b4a06;hb=7d9eb2e45b4a9ff4cb053b1ec37602be88528b62;hp=81dedda569874775114bce599334ac720b3662e0;hpb=e1cf7f788fe0e6ff984627641cfde2c17999de5d;p=ghc-hetmet.git diff --git a/rts/win32/IOManager.c b/rts/win32/IOManager.c index 81dedda..c9a759f 100644 --- a/rts/win32/IOManager.c +++ b/rts/win32/IOManager.c @@ -16,6 +16,7 @@ #include #include #include +#include /* * Internal state maintained by the IO manager. @@ -181,7 +182,15 @@ IOWorkerProc(PVOID param) len = write(work->workData.ioData.fd, work->workData.ioData.buf, work->workData.ioData.len); - if (len == -1) { errCode = errno; } + if (len == -1) { + errCode = errno; + // write() gets errno wrong for + // ERROR_NO_DATA, we have to fix it here: + if (errCode == EINVAL && + GetLastError() == ERROR_NO_DATA) { + errCode = EPIPE; + } + } } complData = work->workData.ioData.buf; fd = work->workData.ioData.fd;