ghc's hPutBuf doesn't obey the buffering mode

Ian Lynagh igloo at earth.li
Thu Apr 14 21:38:38 EDT 2005


If I run this program:

--------------------------------------------------
import System.Cmd (system)
import Foreign.C.String (castCharToCChar)
import Foreign.Marshal.Array (newArray)
import System.IO (hSetBinaryMode, hPutBuf, stdout, hSetBuffering,
                  BufferMode(..))

main = do hSetBinaryMode stdout True
          hSetBuffering stdout LineBuffering
          p <- newArray (map castCharToCChar "foo\n")
          hPutBuf stdout p 4
          system "sleep 5"
          putStr "bar\n"
--------------------------------------------------

compiled by GHC then it waits 5 seconds and then prints foo and bar
together.

With hugs, foo is printed and then 5 seconds later bar is printed, as I
would expect.


Thanks
Ian




More information about the Glasgow-haskell-bugs mailing list