From 38910424f28727e9c99dcf0430adb6545a53f474 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 10 Nov 2015 14:41:19 +0100 Subject: [PATCH] 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. --- sched.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sched.c b/sched.c index bd8add0..c21f40d 100644 --- a/sched.c +++ b/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; }