Skip to content

Commit

Permalink
In the kqueue backend, do not report EBADF as an EV_READ
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
nmathewson committed Feb 10, 2012
1 parent 19715a6 commit 5d7bfa1
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions kqueue.c
Original file line number Diff line number Diff line change
Expand Up @@ -335,10 +335,15 @@ kq_dispatch(struct event_base *base, struct timeval *tv)
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:
Expand Down

0 comments on commit 5d7bfa1

Please sign in to comment.