https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=246350

            Bug ID: 246350
           Summary: kqueue fails to report pipe writable after the read
                    end is closed
           Product: Base System
           Version: 12.1-RELEASE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: kern
          Assignee: b...@freebsd.org
          Reporter: n...@pobox.com
 Attachment #214335 text/plain
         mime type:

Created attachment 214335
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=214335&action=edit
fbsd-kqueue-pipe-bug-demo.py

Consider the following sequence of events:

1. Call pipe() to open a pipe
2. Set the write side to non-blocking
3. Write into the write side until the pipe buffer is full and write() returns
EWOULDBLOCK
4. Use kqueue to register a wait for the write end to become writable again
(EVFILT_WRITE)
5. Close the read end of the pipe

At this point, I would expect that kqueue would return an event to report that
the pipe is "writable". The man page says it will ("The filter will set EV_EOF
when the reader disconnects"). On the same pipe, in this situation, select()
reports that it's writable. On macOS, kqueue reports that it's writable.

However, on FreeBSD 12, kqueue does *not* report any event in this situation.

I've attached a minimal Python script to demonstrate.

Output from the script when running on macOS:

------------
filling pipe buffer
select() says the write pipe is NOT writable
closing read end of pipe
select() says the write pipe is writable
waiting for kqueue to report the write end is writable
done!
[<select.kevent ident=4 filter=-2 flags=0x8001 fflags=0x0 data=0x0 udata=0x0>]
------------

Output from the script when running on FreeBSD 12.1-RELEASE:

------------
filling pipe buffer
select() says the write pipe is NOT writable
closing read end of pipe
select() says the write pipe is writable
waiting for kqueue to report the write end is writable
[...hangs forever...]
------------

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
freebsd-bugs@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to