]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Attempt to fix assert on timeout of subrequests
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 5 Mar 2024 16:48:31 +0000 (10:48 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 5 Mar 2024 16:48:31 +0000 (10:48 -0600)
src/lib/io/worker.c
src/lib/unlang/interpret.c
src/lib/unlang/interpret_synchronous.c

index 230d465df10caef1521364cae1359e539536b31e..da838f74d99cb1f23e9a3bb21fe14670dc4204b7 100644 (file)
@@ -46,6 +46,7 @@
  *
  * @copyright 2016 Alan DeKok (aland@freeradius.org)
  */
+
 RCSID("$Id$")
 
 #define LOG_PREFIX worker->name
@@ -59,6 +60,7 @@ RCSID("$Id$")
 #include <freeradius-devel/unlang/base.h>
 #include <freeradius-devel/unlang/call.h>
 #include <freeradius-devel/unlang/interpret.h>
+#include <freeradius-devel/server/request.h>
 #include <freeradius-devel/util/dlist.h>
 #include <freeradius-devel/util/minmax_heap.h>
 
@@ -1197,17 +1199,22 @@ static void _worker_request_done_detached(request_t *request, UNUSED rlm_rcode_t
  */
 static void _worker_request_detach(request_t *request, UNUSED void *uctx)
 {
-//     fr_worker_t     *worker = talloc_get_type_abort(uctx, fr_worker_t);
+       fr_worker_t     *worker = talloc_get_type_abort(uctx, fr_worker_t);
 
-       RDEBUG3("Request is detached");
-       fr_assert(request_is_detached(request));
+       if (request_is_detachable(request)) {
+               /*
+               *       End the time tracking...  We don't track detached requests,
+               *       because they don't contribute for the time consumed by an
+               *       external request.
+               */
+               worker_request_time_tracking_end(worker, request, fr_time());
 
-       /*
-        *      End the time tracking...  We don't track detached requests,
-        *      because they don't contribute for the time consumed by an
-        *      external request.
-        */
-//     worker_request_time_tracking_end(worker, request, fr_time());
+               if (request_detach(request) < 0) RPEDEBUG("Failed detaching request");
+
+               RDEBUG3("Request is detached");
+       } else {
+               fr_assert_msg(0, "Request is not detachable");
+       }
 
        return;
 }
index 7674008a9666e4ca1fada4b7a38d6e4f264e3d0e..4a74fbc8d21dd6366c943d4df0aee0f20c0beaab 100644 (file)
@@ -1108,9 +1108,8 @@ void unlang_interpret_request_detach(request_t *request)
        if (!request_is_detachable(request)) return;
 
        intp = stack->intp;
-       intp->funcs.detach(request, intp->uctx);
 
-       if (request_detach(request) < 0) RPEDEBUG("Failed detaching request");
+       intp->funcs.detach(request, intp->uctx);
 }
 
 /** Send a signal (usually stop) to a request
index 7df176e2597a7e0558156231f1f899e84fcb6dbb..1e05dc8445cd519d4060ff546bcd0fe8d0b0691d 100644 (file)
@@ -101,6 +101,8 @@ static void _request_done_detached(request_t *request, UNUSED rlm_rcode_t rcode,
 static void _request_detach(request_t *request, UNUSED void *uctx)
 {
        RDEBUG3("Synchronous request detached");
+
+       if (request_detach(request) < 0) RPEDEBUG("Failed detaching request");
 }
 
 /** Request has been stopped