oleg: > > I'd like to point out a reliable, proven and simple way of interacting > with another process, via unidirectional or bidirectional pipes. The > method supports Unix sockets, pipes, and TCP sockets. > > I too have noticed insidious bugs in GHC run-time when communicating > with another process via a pipe. I tried to use runInteractiveProcess; > it worked -- up to file sizes of about 300Kb. Then GHC run-time seems > to `loses synchronization' -- and corrupts IO buffers, receiving stuff > that cannot have been possibly sent. This is because handle operations > are asynchronous and the GHC scheduler seems to have race conditions. > That behavior was totally unacceptable. I was writing a production > code, and can't afford such errors.
Did you file a bug report!? Can you follow up with information we can use to chase this down. > Therefore, I wrote a simple foreign function interface to the code > sys_open that I have been using for about fifteen years. This code > does work, in production, for very large file sizes and long-running > processes, on many Unix and Unix-like systems. I was told once about a > Cygwin port. > > http://okmij.org/ftp/syscall-interpose.html#Application > http://okmij.org/ftp/packages/sys_open.c > http://okmij.org/ftp/Haskell/MySysOpen.hs > > Please see the test at the end of the file MySysOpen.hs. The test > interacts with another process over a bi-directional pipe, repeatedly > sending and receiving data. The amount of received data is large > (about 510K). To file a bug, go here, http://hackage.haskell.org/trac/ghc/newticket?type=bug -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe