[BUG] don't call epoll_ctl() on closed sockets
Some I/O callbacks are able to close their socket themselves. We
want to check this before calling epoll_ctl(EPOLL_CTL_DEL), otherwise
we get a -1 EBADF. Right now is looks like this could not cause any
trouble but the case is racy enough to fix it.
diff --git a/src/ev_sepoll.c b/src/ev_sepoll.c
index feca967..6a3c459 100644
--- a/src/ev_sepoll.c
+++ b/src/ev_sepoll.c
@@ -388,6 +388,10 @@
fd_list[fd].e &= ~FD_EV_MASK_W;
}
+ /* one callback might already have closed the fd by itself */
+ if (fdtab[fd].state == FD_STCLOSE)
+ continue;
+
/* Now, we will adjust the event in the poll list. Indeed, it
* is possible that an event which was previously in the poll
* list now goes out, and the opposite is possible too. We can