From 67e21d94d432d0e1288e294d275cbf2131571ea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= Date: Thu, 5 Dec 2024 12:37:37 +0100 Subject: [PATCH] mark loop as shuttingdown earlier in shutdown_cb `shutdown_trigger_close_cb` is not called in the main loop since queued events in the `loop->async_trigger`, including loop teardown (shutdown_server) are processed first, before the `uv_close` callback is executed.. In order to pass the information to the queued events, it is necessary to set the flag earlier in the process and not wait for the `uv_close` callback to trigger. --- lib/isc/loop.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/isc/loop.c b/lib/isc/loop.c index 44a6239de1..d04c4cc4ad 100644 --- a/lib/isc/loop.c +++ b/lib/isc/loop.c @@ -140,8 +140,6 @@ static void shutdown_trigger_close_cb(uv_handle_t *handle) { isc_loop_t *loop = uv_handle_get_data(handle); - loop->shuttingdown = true; - isc_loop_detach(&loop); } @@ -167,6 +165,9 @@ shutdown_cb(uv_async_t *handle) { /* Make sure, we can't be called again */ uv_close(&loop->shutdown_trigger, shutdown_trigger_close_cb); + /* Mark this loop as shutting down */ + loop->shuttingdown = true; + if (DEFAULT_LOOP(loopmgr) == CURRENT_LOOP(loopmgr)) { /* Stop the signal handlers */ isc_signal_stop(loopmgr->sigterm);