diff --git a/src/core/manager.c b/src/core/manager.c index 33a708adf8..7026a58d73 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -3221,6 +3221,9 @@ int manager_reload(Manager *m) { exec_runtime_vacuum(m); + assert(m->n_reloading > 0); + m->n_reloading--; + /* It might be safe to log to the journal now and connect to dbus */ manager_recheck_journal(m); manager_recheck_dbus(m); @@ -3230,9 +3233,6 @@ int manager_reload(Manager *m) { if (q < 0 && r >= 0) r = q; - assert(m->n_reloading > 0); - m->n_reloading--; - m->send_reloading_done = true; return r; @@ -3596,6 +3596,9 @@ void manager_recheck_dbus(Manager *m) { * connection of the API bus). That's because the system bus after all runs as service of the system instance, * while in the user instance we can assume it's already there. */ + if (MANAGER_IS_RELOADING(m)) + return; /* don't check while we are reloading… */ + if (manager_dbus_is_running(m, false)) { (void) bus_init_api(m); @@ -3646,6 +3649,10 @@ void manager_recheck_journal(Manager *m) { if (getpid_cached() != 1) return; + /* Don't check this while we are reloading, things might still change */ + if (MANAGER_IS_RELOADING(m)) + return; + /* The journal is fully and entirely up? If so, let's permit logging to it, if that's configured. If the * journal is down, don't ever log to it, otherwise we might end up deadlocking ourselves as we might trigger * an activation ourselves we can't fulfill. */ diff --git a/src/core/unit.c b/src/core/unit.c index cb45dc290a..52851b6ffc 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -2501,10 +2501,8 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su } } - if (!MANAGER_IS_RELOADING(u->manager)) { - manager_recheck_journal(m); - manager_recheck_dbus(m); - } + manager_recheck_journal(m); + manager_recheck_dbus(m); unit_trigger_notify(u);