diff --git a/src/timerfd_manager.cpp b/src/timerfd_manager.cpp index e94af8f3..c46f3f5f 100644 --- a/src/timerfd_manager.cpp +++ b/src/timerfd_manager.cpp @@ -90,6 +90,12 @@ void timerfd_manager_t::clear_timer(int timer_id) void timerfd_manager_t::set_nearest() { + if (onstack > 0) + { + // Prevent re-entry + return; + } + onstack++; again: if (!timers.size()) { @@ -139,6 +145,7 @@ again: } wait_state = wait_state | 1; } + onstack--; } void timerfd_manager_t::handle_readable() diff --git a/src/timerfd_manager.h b/src/timerfd_manager.h index 6bdad07d..d76b614d 100644 --- a/src/timerfd_manager.h +++ b/src/timerfd_manager.h @@ -22,6 +22,7 @@ class timerfd_manager_t int timerfd; int nearest = -1; int id = 1; + int onstack = 0; std::vector timers; void inc_timer(timerfd_timer_t & t);