[GHC] #7353: Make system IO interruptible on Windows
GHC
cvs-ghc at haskell.org
Tue Oct 30 14:03:34 CET 2012
#7353: Make system IO interruptible on Windows
---------------------------------+------------------------------------------
Reporter: joeyadams | Owner:
Type: bug | Status: new
Priority: normal | Milestone: 7.8.1
Component: libraries/base | Version: 7.6.1
Keywords: | Os: Windows
Architecture: Unknown/Multiple | Failure: Incorrect result at runtime
Difficulty: Unknown | Testcase:
Blockedby: | Blocking:
Related: |
---------------------------------+------------------------------------------
Comment(by simonmar):
Ah, well done for finding the winio package - I was looking for it earlier
but couldn't remember what it was called or who the author was.
So I think your design involves a single IO manager thread and a pool of
worker OS threads to start/cancel each IO request, right? While this
would work, I think it not ideal, because you'll need one OS thread for
each in-progress IO operation, since all of these OS threads are blocked
in the `(Ptr OVERLAPPED -> IO ())` function waiting for the result.
Perhaps instead make the IO manager itself a bound thread, and perform all
the start and cancel operations on the IO manager thread. Then an IO
request is performed by sending the IO manager a pair: `(start, MVar
Completion)`, where `start` is the operation to start the IO and the MVar
signals completion. The calling thread would block on the `MVar` inside a
`catch`, where the exception handler tells the IO manager to cancel the IO
by passing it a `cancel` action.
I suppose in general you will need multiple IO manager threads, to avoid
the problem with `CancelIo` cancelling all the pending IO associated with
a given HANDLE. We expect it to be rare to have multiple outstanding IO
requests on the same HANDLE though - maybe you could even make it an
error.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7353#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list