From 0b60725b6817a819b0d3c5ad940aef3eda008b88 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Fri, 14 Nov 2008 13:05:46 +0000 Subject: [PATCH] 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. --- compiler/ghci/InteractiveUI.hs | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) 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. -- 1.7.10.4