From: Arran Cudbard-Bell Date: Fri, 28 Mar 2025 02:33:34 +0000 (-0600) Subject: Have to use O(N) move for inserting deffered events X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df8e5ecc99943ba994b2ade389e3e0aade226504;p=thirdparty%2Ffreeradius-server.git Have to use O(N) move for inserting deffered events --- diff --git a/src/lib/util/timer.c b/src/lib/util/timer.c index 5ce3362ecdc..888615e67b6 100644 --- a/src/lib/util/timer.c +++ b/src/lib/util/timer.c @@ -898,6 +898,7 @@ static int timer_list_lst_deferred(fr_timer_list_t *tl) */ static int timer_list_ordered_deferred(fr_timer_list_t *tl) { + fr_timer_t *ev; #ifndef NDEBUG { fr_timer_t *head, *tail; @@ -916,10 +917,12 @@ static int timer_list_ordered_deferred(fr_timer_list_t *tl) #endif /* - * O(1) operation. Much better than moving the - * events individually. + * Can't use timer_move_head as entry positions + * for the two lists are different. */ - timer_move_head(&tl->ordered, &tl->deferred); + while ((ev = timer_pop_head((&tl->deferred)))) { + timer_insert_tail(&tl->ordered, ev); + } return 0; }