eloop: fix leaving dead FDs pollable
authorDavid Herrmann <dh.herrmann@googlemail.com>
Sun, 7 Oct 2012 11:09:27 +0000 (13:09 +0200)
committerDavid Herrmann <dh.herrmann@googlemail.com>
Sun, 7 Oct 2012 11:09:27 +0000 (13:09 +0200)
We used to remove dead FDs from the epoll-loop, but we should do this only
if they are no longer readable. An FD might be dead/HUP but still
readable.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
src/eloop.c

index 3badbbc..eabfeb2 100644 (file)
@@ -836,7 +836,7 @@ int ev_eloop_dispatch(struct ev_eloop *loop, int timeout)
                                continue;
 
                        mask = convert_mask(ep[i].events);
-                       if (mask & EV_HUP)
+                       if ((mask & (EV_ERR | EV_HUP)) == mask)
                                ev_fd_disable(fd);
 
                        fd->cb(fd, mask, fd->data);