From 56e5322b452ada676ca03884d7e813f42e007013 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Sun, 3 Jun 2018 12:04:55 +1000 Subject: [PATCH] EventManager: Never block if a forced file descriptor is present --- src/event_manager.cc | 5 +++++ src/event_manager.hh | 1 + 2 files changed, 6 insertions(+) diff --git a/src/event_manager.cc b/src/event_manager.cc index eed7614f..0767473a 100644 --- a/src/event_manager.cc +++ b/src/event_manager.cc @@ -91,6 +91,9 @@ bool EventManager::handle_next_events(EventMode mode, sigset_t* sigmask, bool bl } bool with_timeout = false; + if (m_has_forced_fd) + block = false; + timespec ts{}; if (block and not m_timers.empty()) { @@ -113,6 +116,7 @@ bool EventManager::handle_next_events(EventMode mode, sigset_t* sigmask, bool bl // copy forced fds *after* select, so that signal handlers can write to // m_forced_fd, interupt select, and directly be serviced. + m_has_forced_fd = false; fd_set forced = m_forced_fd; FD_ZERO(&m_forced_fd); @@ -147,6 +151,7 @@ bool EventManager::handle_next_events(EventMode mode, sigset_t* sigmask, bool bl void EventManager::force_signal(int fd) { FD_SET(fd, &m_forced_fd); + m_has_forced_fd = true; } SignalHandler set_signal_handler(int signum, SignalHandler handler) diff --git a/src/event_manager.hh b/src/event_manager.hh index 91a8d41c..f4bece31 100644 --- a/src/event_manager.hh +++ b/src/event_manager.hh @@ -98,6 +98,7 @@ private: Vector m_fd_watchers; Vector m_timers; fd_set m_forced_fd; + bool m_has_forced_fd = false; TimePoint m_last; };