containerd / fifo

fifo pkg for Go
https://containerd.io
Apache License 2.0
87 stars 30 forks source link

[Darwin] Read() does not always return when closing the reader #43

Open sameo opened 2 years ago

sameo commented 2 years ago

I'm seeing different behaviours on MacOS and Linux, when closing a reader.

When running make test with https://github.com/containerd/fifo/pull/42 applied, the TestFifoCloseWhileReadingAndWriting fails on MacOS but passes on Linux.

On MacOS, I'm seeing that if I open a writer on a FIFO, closing the reader won't unblock a pending Read() and a Write() from the writer will be received by the reader (After we close the reader):

=== RUN   TestFifoCloseWhileReadingAndWriting
    fifo_test.go:437: 
                Error Trace:    fifo_test.go:437
                Error:          An error is expected but got nil.
                Test:           TestFifoCloseWhileReadingAndWriting
    fifo_test.go:441: Read should not succeed

If there are no writers for the FIFO, closing the reader works as expected on both Linux and MacOS, i.e. the pending Read() returns the expected error (ErrReadClosed).