From 9b5a527f5bf898250a797dde59cadb4f64e8967a Mon Sep 17 00:00:00 2001 From: Maxime Henrion Date: Thu, 16 May 2013 16:38:39 +0000 Subject: [PATCH] If evsel->del() fails, don't leave the evmap in an inconsistent state. This fixes assertion failures in cases where epoll() fails with EBADF -- the root cause for which is as of yet unknown. It seems something (OpenSSL?) is closing the file descriptor under our feet. --- evmap.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/evmap.c b/evmap.c index d2160fbe..1e2f8b55 100644 --- a/evmap.c +++ b/evmap.c @@ -375,9 +375,11 @@ evmap_io_del_(struct event_base *base, evutil_socket_t fd, struct event *ev) if (res) { void *extra = ((char*)ctx) + sizeof(struct evmap_io); - if (evsel->del(base, ev->ev_fd, old, res, extra) == -1) - return (-1); - retval = 1; + if (evsel->del(base, ev->ev_fd, old, res, extra) == -1) { + retval = -1; + } else { + retval = 1; + } } ctx->nread = nread; -- 2.50.1