[DragonFlyBSD - Bug #3307] (Resolved) select() not working as expect when a pipe is closed

bugtracker-admin at leaf.dragonflybsd.org bugtracker-admin at leaf.dragonflybsd.org
Fri Nov 19 10:20:27 PST 2021

Issue #3307 has been updated by dillon.

Status changed from New to Resolved
Priority changed from Normal to High

Pushed 3e6cd71a300e70d8644d to master fixing the problem.

The pipe driver was refusing to register a knote for writing if the other end was closed prior to the registration.  So it would work properly if the parent got its first select() in before the child exited, but would not work properly if the child exited first.  Only the pipe driver had this behavior.  Should now be fixed and will be MFCd momentarily.


Bug #3307: select() not working as expect when a pipe is closed

* Author: tmunro
* Status: Resolved
* Priority: High
* Target version: 6.0
* Start date: 2021-11-19
When a the write end of a pipe is in the writefds set of a call to select(), and the read end is closed, I think select() should report the descriptor as writable (because writing would produce EPIPE or SIGPIPE), but it does not.  We suspect this changed, and we noticed the change in the PostgreSQL build farm after upgrading an ancient Dragonfly build machine to the current release.  In our real usage, this causes Perl IPC::Run in our test harness to hang, but here's a minimal repro in C:


(Please disregard the discussion of kqueue problems on ancient macOS, which turned out to be a separate problem, completely unrelated).

You have received this notification because you have either subscribed to it, or are involved in it.
To change your notification preferences, please click here: http://bugs.dragonflybsd.org/my/account

More information about the Bugs mailing list