From: Simon Marlow Date: Fri, 14 Nov 2008 13:05:46 +0000 (+0000) Subject: Don't put stdin into non-blocking mode (#2778, #2777) X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=0b60725b6817a819b0d3c5ad940aef3eda008b88 Don't put stdin into non-blocking mode (#2778, #2777) This used to be necessary when our I/O library needed all FDs in O_NONBLOCK mode, and readline used to put stdin back into blocking mode. Nowadays the I/O library can cope with FDs in blocking mode, and #2778/#2777 show why this is important. --- diff --git a/compiler/ghci/InteractiveUI.hs b/compiler/ghci/InteractiveUI.hs index 933a98e..059d692 100644 --- a/compiler/ghci/InteractiveUI.hs +++ b/compiler/ghci/InteractiveUI.hs @@ -96,10 +96,6 @@ import GHC.TopHandler import Data.IORef ( IORef, readIORef, writeIORef ) -#ifdef USE_EDITLINE -import System.Posix.Internals ( setNonBlockingFD ) -#endif - ----------------------------------------------------------------------------- ghciWelcomeMsg :: String @@ -641,11 +637,8 @@ readlineLoop = do return (Just str) withReadline :: IO a -> IO a -withReadline = bracket_ stopTimer (do startTimer; setNonBlockingFD 0) - -- Two problems are being worked around here: - -- 1. readline sometimes puts stdin into blocking mode, - -- so we need to put it back for the IO library - -- 2. editline doesn't handle some of its system calls returning +withReadline = bracket_ stopTimer startTimer + -- editline doesn't handle some of its system calls returning -- EINTR, so our timer signal confuses it, hence we turn off -- the timer signal when making calls to editline. (#2277) -- If editline is ever fixed, we can remove this.