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.
This commit is contained in:
Pavel Březina
2024-12-05 12:37:37 +01:00
committed by Ondřej Surý
parent a61910bdca
commit 67e21d94d4

View File

@@ -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);