diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 64e022a674..a1bc5c4691 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -515,6 +515,8 @@ static int manager_stop(Manager *manager, ManagerState state) { assert_not_reached(); } + (void) sd_notify(/* unset_environment= */ false, NOTIFY_STOPPING_MESSAGE); + manager->state = state; Link *link; @@ -1273,6 +1275,9 @@ int manager_reload(Manager *m, sd_bus_message *message, sd_varlink *varlink, boo assert(m); assert(!message || !varlink); /* D-Bus and Varlink callers are mutually exclusive */ + if (m->state != MANAGER_RUNNING) + return -ESHUTDOWN; /* Refuse reloading if we are stopping or restarting. */ + log_debug("Reloading..."); (void) notify_reloading(); diff --git a/src/udev/udev-manager.c b/src/udev/udev-manager.c index 2c43d9ccc5..b204b9abfb 100644 --- a/src/udev/udev-manager.c +++ b/src/udev/udev-manager.c @@ -247,6 +247,9 @@ int manager_reset_kill_workers_timer(Manager *manager) { void manager_exit(Manager *manager) { assert(manager); + if (manager->exit) + return; + manager->exit = true; (void) sd_notify(/* unset_environment= */ false, NOTIFY_STOPPING_MESSAGE); @@ -277,6 +280,9 @@ void notify_ready(Manager *manager) { assert(manager); + if (manager->exit) + return; + r = sd_notifyf(/* unset_environment= */ false, "READY=1\n" "STATUS=Processing with %u children at max", manager->config.children_max); @@ -292,6 +298,9 @@ void manager_reload(Manager *manager, bool force) { assert(manager); + if (manager->exit) + return; + assert_se(sd_event_now(manager->event, CLOCK_MONOTONIC, &now_usec) >= 0); if (!force && now_usec < usec_add(manager->last_usec, 3 * USEC_PER_SEC)) /* check for changed config, every 3 seconds at most */