From: Miroslav Lichvar Date: Tue, 10 Nov 2015 13:41:19 +0000 (+0100) Subject: sched: don't return currently used timeout ID X-Git-Tag: 2.3-pre1~109 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=38910424f28727e9c99dcf0430adb6545a53f474;p=thirdparty%2Fchrony.git 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. --- diff --git a/sched.c b/sched.c index bd8add03..c21f40de 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; }