]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Fix request priorities
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 28 Aug 2024 21:45:32 +0000 (16:45 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 28 Aug 2024 22:28:20 +0000 (17:28 -0500)
src/lib/io/worker.c

index eadb77c5c36479ee4283ee4647cc92cde9ff0736..9e2bbbb861c80b1e013f561b8a1a1a502fc06e28 100644 (file)
@@ -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;
        }
 }