Fix ghci crash when the user code closes stdin
authorIan Lynagh <ian@well-typed.com>
Sat, 15 Jun 2013 20:54:22 +0000 (21:54 +0100)
committerIan Lynagh <ian@well-typed.com>
Sat, 15 Jun 2013 20:54:22 +0000 (21:54 +0100)
Now that we share stdin with the program, we have to check for
handle-closed as well as EOF, as the program might have closed
stdin.

ghc/InteractiveUI.hs

index c49395d..a30410b 100644 (file)
@@ -587,6 +587,11 @@ fileLoop hdl = do
    l <- liftIO $ tryIO $ hGetLine hdl
    case l of
         Left e | isEOFError e              -> return Nothing
+               | -- as we share stdin with the program, the program
+                 -- might have already closed it, so we might get a
+                 -- handle-closed exception. We therefore catch that
+                 -- too.
+                 isIllegalOperation e      -> return Nothing
                | InvalidArgument <- etype  -> return Nothing
                | otherwise                 -> liftIO $ ioError e
                 where etype = ioeGetErrorType e