We were doing this because of (correct) reports that NetBSD gives an
EBADF when you try to add the write side of a pipe for which the
read side has been closed. But on most kqueue platforms, that
doesn't happen, and on *all* kqueue platforms, reporting a
nonexistent fd (which we usually have if we have seen EBADF) as
readable tends to give programs a case of the vapors.
Nicholas Marriott wrote the original patch here; I did the comment
fixes.
case EINVAL:
continue;
- /* Can occur on a delete if the fd is closed. Can
- * occur on an add if the fd was one side of a pipe,
- * and the other side was closed. */
+ /* Can occur on a delete if the fd is closed. */
case EBADF:
+ /* XXXX On NetBSD, we can also get EBADF if we
+ * try to add the write side of a pipe, but
+ * the read side has already been closed.
+ * Other BSDs call this situation 'EPIPE'. It
+ * would be good if we had a way to report
+ * this situation. */
+ continue;
/* These two can occur on an add if the fd was one side
* of a pipe, and the other side was closed. */
case EPERM: