[GHC] #13497: GHC does not use select()/poll() correctly on non-Linux platforms
GHC
ghc-devs at haskell.org
Sun Jul 30 23:14:58 UTC 2017
#13497: GHC does not use select()/poll() correctly on non-Linux platforms
-------------------------------------+-------------------------------------
Reporter: nh2 | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Runtime System | Version: 8.0.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking: 8684
Related Tickets: #8684, #12912 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by nh2):
I have pushed a workaround to my branch
[https://github.com/ghc/ghc/compare/ghc-8.2.1-release...nh2:ghc-8.2.1
-improve-fdRready-precision ghc-8.2.1-improve-fdRready-precision], namely
commit
[https://github.com/nh2/ghc/commit/1d037a16251751e98d4302f4be1e5659c3240958
1d037a16].
This completes my testing of my branch on Windows.
I have tested the 4 of the 5 possible branches that `fdReady()` can take
on Windows:
1. Testing the `FILE_TYPE_PIPE` case suceeded with `ghc-bug-13497
-accuracy-test.hs` (from
[https://ghc.haskell.org/trac/ghc/ticket/13497#comment:18 comment 18]), by
running it from the MSYS2 Mingw-w64 console (NOT `cmd.exe`!)
2. Testing the `FILE_TYPE_DISK` case succeeded with the following file
`ghc-bug-13497-windows-file-test.hs`:
{{{
import System.IO
main = do
writeFile "testfile" "hello"
handle <- openFile "testfile" ReadMode
hWaitForInput handle (5 * 1000)
}}}
3. Testing the `FILE_TYPE_CHAR` case suceeded by running `ghc-bug-13497
-accuracy-test.hs` (see above) , but this time from `cmd.exe`. Here,
focusing and unfocusing the Window triggers `EventType == FOCUS_EVENT` so
that our loop is executed (I confirmed this with a print in the loop).
4. Testing the `if (isSock)` case succeded with the echo server example
given in the previous comment.
5. I did not test the `default:` case
([https://github.com/nh2/ghc/blob/1d037a16251751e98d4302f4be1e5659c3240958/libraries/base/cbits/inputReady.c#L231
this one]), because I don't know how to trigger it. There are 3 cases in
which this branch could be taken according to the `GetFileType()`
[https://msdn.microsoft.com/en-
us/library/windows/desktop/aa364960(v=vs.85).aspx documentation]:
A. `FILE_TYPE_REMOTE`, which seems impossible to create on modern
Windows
B. `FILE_TYPE_UNKNOWN`, for which it is literally unknown on how it can
be created
C. The very bottom of the `FILE_TYPE_PIPE` case, when `/* PeekNamedPipe
didn't work - fall through to the general case */` happens. I don't know
how to trigger this. Simon Marlow introduced this logic 9 years ago in
commit
[https://github.com/nh2/ghc/commit/1b0906e072344376ec7cb95afe314f2157b62b20
1b0906e0], so maybe he knows.
In any case, with this testing done I'm reasonably confident that my
branch doesn't regress Windows.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13497#comment:25>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list