ghc's hPutBuf doesn't obey the buffering mode
Simon Marlow
simonmar at microsoft.com
Tue Apr 19 09:13:54 EDT 2005
On 15 April 2005 02:39, Ian Lynagh wrote:
> 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.
True, the implementation doesn't respect LineBuffering (though it does
respect the other buffering modes, I believe). That's a bug.
Cheers,
Simon
More information about the Glasgow-haskell-bugs
mailing list