forked from vitalif/vitastor
Prevent re-entry into timerfd set_nearest
parent
4ece4dfdd0
commit
178bb0e701
|
@ -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()
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue