io_wait: fix: check for EV_ERROR for kqueue()
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Thu, 17 Jun 2010 14:15:10 +0000 (16:15 +0200)
committerAndrei Pelinescu - Onciul <andrei@sfantu-petru.ultima>
Thu, 17 Jun 2010 14:28:02 +0000 (16:28 +0200)
commit05c080a53f88babad6729f79015f555f53fdf957
tree1546651a6ff2ce3012f30416d097676e6c00b8bf
parent9da6fae72b9883ab8dbbb4e681c4d4e96d6549e4
io_wait: fix: check for EV_ERROR for kqueue()

Re-enabled and enhanced the check for EV_ERROR when using kqueue
(*bsd).  This is needed to workaround errors reported by kqueue
when trying to delete (EV_DELETE) an already closed FD (this
can happen in the tcp code, where we try to avoid applying
immediately changes in the set of watched FDs and instead
collect them and apply them after all the current kqueue
events are processed => in some corner case situations it's
possible to try to delete the FD from kqueue after the fd
was close()'ed).
This fix will ignore EV_ERROR with data == EBADF. All the other
errors will result in a POLLERR flag for the callback.

It fixes crashes with *bsd under tcp stress tests (lots of very
short lived connections).
io_wait.h