From: Pavel Březina Date: Thu, 5 Dec 2024 11:37:37 +0000 (+0100) Subject: mark loop as shuttingdown earlier in shutdown_cb X-Git-Tag: v9.21.4~31^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=67e21d94d432d0e1288e294d275cbf2131571ea0;p=thirdparty%2Fbind9.git 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. --- diff --git a/lib/isc/loop.c b/lib/isc/loop.c index 44a6239de12..d04c4cc4ad3 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);