From c7cc414c9071491b924b18e7ec596875bd109d6d Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Wed, 30 Dec 2020 17:04:13 +0300 Subject: [PATCH] Skip removed descriptors in epoll (this is possible in real clusters) --- epoll_manager.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/epoll_manager.cpp b/epoll_manager.cpp index 02092469..f25bf1c3 100644 --- a/epoll_manager.cpp +++ b/epoll_manager.cpp @@ -84,8 +84,12 @@ void epoll_manager_t::handle_epoll_events() nfds = epoll_wait(epoll_fd, events, MAX_EPOLL_EVENTS, 0); for (int i = 0; i < nfds; i++) { - auto & cb = epoll_handlers[events[i].data.fd]; - cb(events[i].data.fd, events[i].events); + auto cb_it = epoll_handlers.find(events[i].data.fd); + if (cb_it != epoll_handlers.end()) + { + auto & cb = cb_it->second; + cb(events[i].data.fd, events[i].events); + } } } while (nfds == MAX_EPOLL_EVENTS); }