FreeBSD + FIFO pipes

George Russell
Wed, 19 Feb 2003 17:40:30 +0100

Volker Stolz wrote:> In local.glasgow-haskell-users, you wrote:
>>I'm trying to get HTk to work on FreeBSD (actually FreeBSD running inside a VMware
>>virtual machine, but I don't think that should make any difference).  How HTk works
>>is it creates a couple of pipes
>>       (readIn,writeIn) <- Posix.createPipe
>>       (readOut,writeOut) <- Posix.createPipe
>>The problem I am getting with FreeBSD is that fdRead sometimes reports EOF, even though
>>threadWaitRead has just reported the presence of data.  (And no, I don't think we have
>>a race condition here, the relevant bit of code is in an exclusive lock.)  If I tell it
>>to ignore the EOF and try to read again and again it just throws it into an endless loop,
> Can you cut this down to a simple program, maybe executing /bin/echo
> instead of 'wish'? Notice that the FAQ doesn't apply here as the FAQ
> talks about FIFO createt by mkfifo (which exist in the file system),
> while you talk about pipes.
> I'll try to think of something, but I'd be glad if you already
> had a usable program to reproduce this error.
I think this one is going to remain unsolved.  I have fixed the problem, by reimplementing
the relevant code in a different way (actually resurrecting an old implementation, with
a vital fix) and now it works.  However the cause of the problem I reported is a mystery
to me, and producing a simple test case does not look very easy.

Thanks for your help,