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:
Miroslav Lichvar 2015-11-10 14:41:19 +01:00
parent 0076458e9d
commit 38910424f2

10
sched.c
View file

@ -281,9 +281,17 @@ release_tqe(TimerQueueEntry *node)
static SCH_TimeoutID
get_new_tqe_id(void)
{
TimerQueueEntry *ptr;
try_again:
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;
}