Wolfgang Jeltsch pushed to branch wip/jeltsch/duplex-readability-and-writability at Glasgow Haskell Compiler / GHC

Commits:

1 changed file:

Changes:

  • libraries/ghc-internal/src/GHC/Internal/IO/Handle.hs
    ... ... @@ -502,9 +502,14 @@ hIsClosed handle =
    502 502
     
    
    503 503
     -- | @'hIsReadable' hdl@ returns whether it is possible to read from the handle.
    
    504 504
     hIsReadable :: Handle -> IO Bool
    
    505
    -hIsReadable (DuplexHandle _ _ _) = return True
    
    506
    -hIsReadable handle =
    
    507
    -    withHandle_ "hIsReadable" handle $ \ handle_ -> do
    
    505
    +hIsReadable handle@(FileHandle _ var)
    
    506
    +    = hIsReadable' handle var
    
    507
    +hIsReadable handle@(DuplexHandle _ readingVar _)
    
    508
    +    = hIsReadable' handle readingVar
    
    509
    +
    
    510
    +hIsReadable' :: Handle -> MVar Handle__ -> IO Bool
    
    511
    +hIsReadable' handle readingVar =
    
    512
    +    withHandle_' "hIsReadable" handle readingVar $ \ handle_ -> do
    
    508 513
         case haType handle_ of
    
    509 514
           ClosedHandle         -> ioe_closedHandle
    
    510 515
           SemiClosedHandle     -> ioe_semiclosedHandle
    
    ... ... @@ -512,9 +517,14 @@ hIsReadable handle =
    512 517
     
    
    513 518
     -- | @'hIsWritable' hdl@ returns whether it is possible to write to the handle.
    
    514 519
     hIsWritable :: Handle -> IO Bool
    
    515
    -hIsWritable (DuplexHandle _ _ _) = return True
    
    516
    -hIsWritable handle =
    
    517
    -    withHandle_ "hIsWritable" handle $ \ handle_ -> do
    
    520
    +hIsWritable handle@(FileHandle _ var)
    
    521
    +    = hIsWritable' handle var
    
    522
    +hIsWritable handle@(DuplexHandle _ _ writingVar)
    
    523
    +    = hIsWritable' handle writingVar
    
    524
    +
    
    525
    +hIsWritable' :: Handle -> MVar Handle__ -> IO Bool
    
    526
    +hIsWritable' handle writingVar =
    
    527
    +    withHandle_' "hIsWritable" handle writingVar $ \ handle_ -> do
    
    518 528
         case haType handle_ of
    
    519 529
           ClosedHandle         -> ioe_closedHandle
    
    520 530
           SemiClosedHandle     -> ioe_semiclosedHandle