1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-30 14:55:37 +03:00

move MANAGER_IS_RELOADING() check into manager_recheck_{dbus|journal}() (#8510)

Let's better check this inside of the call than before it, so that we
never issue this while reloading, even should these calls be called due
to other reasons than just the unit notify.

This makes sure the reload state is unset a bit earlier in
manager_reload() so that we can safely call this function from there and
they do the right thing.

Follow-up for e63ebf71ed.
This commit is contained in:
Lennart Poettering 2018-03-21 12:03:45 +01:00 committed by Zbigniew Jędrzejewski-Szmek
parent d56fced9e0
commit 31dc1ca3bf
2 changed files with 12 additions and 7 deletions

View File

@ -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. */

View File

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