]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
assert that the channel has no running requests before ACK close
authorAlan T. DeKok <aland@freeradius.org>
Fri, 14 Jul 2023 13:30:12 +0000 (09:30 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 14 Jul 2023 13:30:59 +0000 (09:30 -0400)
and cancel all of the related requests when the worker is signalled
to exit.

src/lib/io/worker.c

index bc722fcf1dfc2fcc187dda0dad6a0f2d526cac7d..7f01872957c2e048aed47d6c47147c0950096e5e 100644 (file)
@@ -334,6 +334,8 @@ static void worker_channel_callback(void *ctx, void const *data, size_t data_siz
                        fr_assert_msg(fr_dlist_num_elements(&worker->channel[i].dlist) == 0,
                                      "Network added messages to channel after sending FR_CHANNEL_CLOSE");
 
+                       fr_assert(fr_dlist_num_elements(&worker->channel[i].dlist) == 0);
+
                        fr_channel_responder_ack_close(ch);
                        fr_assert(ms != NULL);
                        fr_message_set_gc(ms);
@@ -1037,6 +1039,8 @@ void fr_worker_destroy(fr_worker_t *worker)
        }
        fr_assert(fr_heap_num_elements(worker->runnable) == 0);
 
+       ///
+
        /*
         *      Signal the channels that we're closing.
         *
@@ -1054,6 +1058,9 @@ void fr_worker_destroy(fr_worker_t *worker)
                fr_assert_msg(fr_dlist_num_elements(&worker->channel[i].dlist) == 0,
                              "Pending messages in channel after cancelling request");
 
+               worker_requests_cancel(&worker->channel[i]);
+
+               fr_assert(fr_dlist_num_elements(&worker->channel[i].dlist) == 0);
                fr_channel_responder_ack_close(worker->channel[i].ch);
        }