]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
trunk: Allow management whilst in a handler, but don't allow connections to be freed
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 4 Apr 2020 03:03:52 +0000 (21:03 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 4 Apr 2020 03:03:52 +0000 (21:03 -0600)
src/lib/server/trunk.c

index bf14a114a841e62ca802b7c0cde7bd162e2b4d0e..6a579cd0b175845dd10ba215ebf6dd44a544b3a6 100644 (file)
@@ -3402,12 +3402,6 @@ static void trunk_manage(fr_trunk_t *trunk, fr_time_t now, char const *caller)
        uint32_t                req_count;
        uint16_t                conn_count;
 
-       /*
-        *      This should never be called if we're inside
-        *      a callback...
-        */
-       rad_assert(!trunk->in_handler);
-
        DEBUG4("%s - Managing trunk", caller);
 
        /*
@@ -3429,7 +3423,9 @@ static void trunk_manage(fr_trunk_t *trunk, fr_time_t now, char const *caller)
        /*
         *      Process deferred connection freeing
         */
-       while ((tconn = fr_dlist_head(&trunk->to_free))) talloc_free(fr_dlist_remove(&trunk->to_free, tconn));
+       if (!trunk->in_handler) {
+               while ((tconn = fr_dlist_head(&trunk->to_free))) talloc_free(fr_dlist_remove(&trunk->to_free, tconn));
+       }
 
        /*
         *      A trunk can be signalled to not proactively