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:
parent
0076458e9d
commit
38910424f2
1 changed files with 9 additions and 1 deletions
10
sched.c
10
sched.c
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue