Prevent re-entry into timerfd set_nearest

Vitaliy Filippov 2023-12-22 02:32:40 +03:00
parent 4ece4dfdd0
commit 178bb0e701
2 changed files with 8 additions and 0 deletions

View File

@ -90,6 +90,12 @@ void timerfd_manager_t::clear_timer(int timer_id)
void timerfd_manager_t::set_nearest() void timerfd_manager_t::set_nearest()
{ {
if (onstack > 0)
{
// Prevent re-entry
return;
}
onstack++;
again: again:
if (!timers.size()) if (!timers.size())
{ {
@ -139,6 +145,7 @@ again:
} }
wait_state = wait_state | 1; wait_state = wait_state | 1;
} }
onstack--;
} }
void timerfd_manager_t::handle_readable() void timerfd_manager_t::handle_readable()

View File

@ -22,6 +22,7 @@ class timerfd_manager_t
int timerfd; int timerfd;
int nearest = -1; int nearest = -1;
int id = 1; int id = 1;
int onstack = 0;
std::vector<timerfd_timer_t> timers; std::vector<timerfd_timer_t> timers;
void inc_timer(timerfd_timer_t & t); void inc_timer(timerfd_timer_t & t);