diff options
author | root <root> | 2007-11-04 23:14:11 +0000 |
---|---|---|
committer | root <root> | 2007-11-04 23:14:11 +0000 |
commit | 22b2a449105d7604f715c1afafeb4fe5ac473f1b (patch) | |
tree | b18e0643b0b285e16de1ac4641e5aecdc59c1bec /ev_epoll.c | |
parent | fbe9562600fa8735c078401aa604b49a5426b0e2 (diff) |
- have to re-check potentially closed fds regularly for epoll. this hurts
badly :(
- still more than twice as fats as libevent.
- many minor fixes
Diffstat (limited to 'ev_epoll.c')
-rw-r--r-- | ev_epoll.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -43,7 +43,9 @@ epoll_modify (EV_P_ int fd, int oev, int nev) | (nev & EV_WRITE ? EPOLLOUT : 0); if (epoll_ctl (epoll_fd, mode, fd, &ev)) - fd_kill (EV_A_ fd); + if (errno != ENOENT /* on ENOENT the fd went away, so try to do the right thing */ + || (nev && epoll_ctl (epoll_fd, EPOLL_CTL_ADD, fd, &ev))) + fd_kill (EV_A_ fd); } static void |