Hello.

Playing with GHC, I met some oddity.
Consider the example:

> import IO
> import Concurrent
> import Posix
> import PosixIO
> 
> main = do
>     (fdIn, fdIn_send) <- createPipe
>     hIn_send <- fdToHandle fdIn_send
>     hIn <- fdToHandle fdIn
>           -- The "waiter" is a simple tk/tcl script which
>           -- prints "click" anytime I click a button.
>     runProcess "./waiter" [] Nothing Nothing
>               Nothing (Just hIn_send) Nothing
>     -- hSetBuffering hIn LineBuffering {-2-}
>     -- hSetBuffering stdin LineBuffering
>     forkIO(interact stdin)
>     -- forkIO(interact hIn) {-1-}
>     main_cycle
>     where
>       interact hIn = do
>           line <- hGetLine hIn
>           numIn <- handleToInt {-made from handleToFd & fdToInt-}
>           -- threadWaitRead numIn {-3-}
>           putStrLn line
>           interact hIn
>       main_cycle = do
>           putStrLn "tick"
>           threadDelay 1000000
>           main_cycle


The example works OK. It prints "tick" once a second and dups my input
as I type it. But, when I uncomment the line {-1-} to handle input from
child as well, everything is hanged on this read operation. Uncommenting
the {-3-} line helps, but, first, I'm not sure it is a right way and,
second, the matter is still unclear - what is the reason of such
difference?

Uncommenting the {-2-} lines doesn't help. I thing the reason is in
some inner properties of the handlers, but have no idea in which one.

Max.

_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to