From: Arran Cudbard-Bell Date: Wed, 28 Aug 2024 21:45:32 +0000 (-0500) Subject: Fix request priorities X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=30f03974643064728fea95f0887b1a8211eb83d8;p=thirdparty%2Ffreeradius-server.git Fix request priorities --- diff --git a/src/lib/io/worker.c b/src/lib/io/worker.c index eadb77c5c36..9e2bbbb861c 100644 --- a/src/lib/io/worker.c +++ b/src/lib/io/worker.c @@ -957,19 +957,22 @@ nak: /** * Track a request_t in the "runnable" heap. - * Higher priorities take precedence, followed by lower sequence numbers + * Higher priorities take precedence, followed by higher sequence numbers */ static int8_t worker_runnable_cmp(void const *one, void const *two) { request_t const *a = one, *b = two; int ret; - ret = CMP(b->async->priority, a->async->priority); + /* Prefer higher priorities to lower priorities */ + ret = CMP_PREFER_LARGER(a->async->priority, b->async->priority); if (ret != 0) return ret; - ret = CMP(a->async->sequence, b->async->sequence); + /* Pefer higher sequence numbers to lower sequence numbers */ + ret = CMP_PREFER_LARGER(a->async->sequence, b->async->sequence); if (ret != 0) return ret; + /* Prefer earlier requests to later requests */ return fr_time_cmp(a->async->recv_time, b->async->recv_time); } @@ -1337,7 +1340,10 @@ static inline CC_HINT(always_inline) void worker_run_request(fr_worker_t *worker (void)unlang_interpret(request); - now = fr_time(); + /* + * Save getting the time _again_ + */ + now = request->async->tracking.last_changed; } }