diff options
author | Michal Schmidt <mschmidt@redhat.com> | 2013-02-28 00:01:10 +0100 |
---|---|---|
committer | Michal Schmidt <mschmidt@redhat.com> | 2013-02-28 02:24:01 +0100 |
commit | 7ed9f6cd785634dd093e1b1550c3c6183177abf6 (patch) | |
tree | 266293630d3cb0a0928a7d4159b55694af2ef831 | |
parent | 6ac8fdc9554a40024827ad9f64d02b4d8d2ab8ba (diff) |
core: count active units that may mind our printing to /dev/console
-rw-r--r-- | src/core/manager.h | 1 | ||||
-rw-r--r-- | src/core/unit.c | 15 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/core/manager.h b/src/core/manager.h index 0d0255289a..78e4bc6404 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -226,6 +226,7 @@ struct Manager { unsigned n_failed_jobs; unsigned n_running_jobs; + unsigned n_on_console; /* Type=idle pipes */ int idle_pipe[2]; diff --git a/src/core/unit.c b/src/core/unit.c index f8a913e39a..e2c06ae8b6 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -1357,6 +1357,21 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su if (UNIT_IS_INACTIVE_OR_FAILED(ns)) cgroup_bonding_trim_list(u->cgroup_bondings, true); + 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 + m->n_on_console++; + } + } + if (u->job) { unexpected = false; |