diff --git a/src/core/manager.c b/src/core/manager.c index 5527e9d429..42423985bc 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -678,6 +678,9 @@ static void manager_clear_jobs_and_units(Manager *m) { assert(hashmap_isempty(m->jobs)); assert(hashmap_isempty(m->units)); + + m->n_on_console = 0; + m->n_running_jobs = 0; } void manager_free(Manager *m) { diff --git a/src/core/unit.c b/src/core/unit.c index 601be60ed0..2f0ac00fcf 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -1360,11 +1360,6 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su if (UNIT_IS_INACTIVE_OR_FAILED(os) != UNIT_IS_INACTIVE_OR_FAILED(ns)) { ExecContext *ec = unit_get_exec_context(u); if (ec && exec_context_may_touch_console(ec)) { - /* XXX The counter may get out of sync if the admin edits - * TTY-related unit file properties and issues a daemon-reload - * while the unit is active. No big deal though, because - * it influences only the printing of boot/shutdown - * status messages. */ if (UNIT_IS_INACTIVE_OR_FAILED(ns)) m->n_on_console--; else @@ -2446,6 +2441,9 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) { return r; } + if (j->state == JOB_RUNNING) + u->manager->n_running_jobs++; + r = job_install_deserialized(j); if (r < 0) { hashmap_remove(u->manager->jobs, UINT32_TO_PTR(j->id));