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()
{
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()

View File

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