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
|
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue