[racket] Deadlock with FIFO files

From: Eric Dobson (eric.n.dobson at gmail.com)
Date: Sun Oct 26 12:46:02 EDT 2014

I attempted reviewing the attached file, and it looks fine and I can
replicate the buggy behavior, but I'm not that familiar with kqueue.

Thanks for the quick turnaround/fix.

On Sun, Oct 26, 2014 at 8:14 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
> It looks like kqueue() is broken for FIFOs on Mac OS X. See the
> enclosed "kqueue_fifo.c". Unless I'm confused (a review of the enclosed
> program would be welcome), adding a kqueue event to watch for FIFO
> input disables an event that watches for FIFO output space, or
> something like that.
>
> I enabled the use of kqueue() on FIFOs only in June. I'll disable it
> again.
>
> At Sat, 25 Oct 2014 21:06:54 -0700, Eric Dobson wrote:
>> I'm attempting to use FIFOs as a simple IPC mechanism and I'm getting
>> into a deadlock. I've simplified my program to the following and am
>> still getting deadlocks. I believe that this shouldn't have an issues,
>> but I might be wrong about that. Am I doing something wrong, or might
>> this be a bug in the IO system? I'm running on OS X 10.9.5 if that is
>> relevant.
>>
>> It usually gets stuck at around 10-11 thousand.
>>
>>
>> #lang racket
>>
>> (define the-fifo-path "the-fifo")
>>
>> (when (file-exists? the-fifo-path)
>>   (delete-file the-fifo-path))
>>
>> (system "mkfifo the-fifo")
>>
>> (thread
>>   (lambda ()
>>     (call-with-output-file* the-fifo-path #:exists 'append
>>       (lambda (port)
>>         (file-stream-buffer-mode port 'none)
>>         (let loop ([i 0])
>>           (printf "Writing ~a~n" i)
>>           (write i port)
>>           (newline port)
>>           (loop (add1 i)))))))
>>
>> (call-with-input-file* the-fifo-path
>>   (lambda (port)
>>     (file-stream-buffer-mode port 'none)
>>     (let loop ()
>>       (displayln "Reading")
>>       (define v (read-line port))
>>       (unless (eof-object? v)
>>         (printf "Read ~a~n" v)
>>         (loop)))))
>> ____________________
>>   Racket Users list:
>>   http://lists.racket-lang.org/users

Posted on the users mailing list.