mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-04 11:45:07 -05:00
sched: don't return currently used timeout ID
To avoid problems in the very unlikely case where a timeout is so long and new IDs are allocated so frequently that they would have a chance to overflow and catch up with it, make sure before returning new ID that it's currently not in use.
This commit is contained in:
10
sched.c
10
sched.c
@@ -281,9 +281,17 @@ release_tqe(TimerQueueEntry *node)
|
|||||||
static SCH_TimeoutID
|
static SCH_TimeoutID
|
||||||
get_new_tqe_id(void)
|
get_new_tqe_id(void)
|
||||||
{
|
{
|
||||||
|
TimerQueueEntry *ptr;
|
||||||
|
|
||||||
|
try_again:
|
||||||
next_tqe_id++;
|
next_tqe_id++;
|
||||||
if (!next_tqe_id)
|
if (!next_tqe_id)
|
||||||
next_tqe_id++;
|
goto try_again;
|
||||||
|
|
||||||
|
/* Make sure the ID isn't already used */
|
||||||
|
for (ptr = timer_queue.next; ptr != &timer_queue; ptr = ptr->next)
|
||||||
|
if (ptr->id == next_tqe_id)
|
||||||
|
goto try_again;
|
||||||
|
|
||||||
return next_tqe_id;
|
return next_tqe_id;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user