summaryrefslogtreecommitdiff
path: root/src/unit.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-07-07 00:00:59 +0200
committerLennart Poettering <lennart@poettering.net>2010-07-07 00:00:59 +0200
commit9e58ff9c5c3bd46a796a20fc6c304cdab489f334 (patch)
tree3bdef2c8802ee1b1deab9729b4f198fdfb2780f1 /src/unit.c
parentfa0f4d8a3a640b235f12e9eb998ce726495622c1 (diff)
manager: optionally print status updates to console on boot
Diffstat (limited to 'src/unit.c')
-rw-r--r--src/unit.c48
1 files changed, 39 insertions, 9 deletions
diff --git a/src/unit.c b/src/unit.c
index 8b5714838d..701dbc0952 100644
--- a/src/unit.c
+++ b/src/unit.c
@@ -776,6 +776,9 @@ int unit_start(Unit *u) {
* before it will start again. */
unit_add_to_dbus_queue(u);
+
+ unit_status_printf(u, "Starting %s...\n", unit_description(u));
+
return UNIT_VTABLE(u)->start(u);
}
@@ -803,6 +806,9 @@ int unit_stop(Unit *u) {
return -EBADR;
unit_add_to_dbus_queue(u);
+
+ unit_status_printf(u, "Stopping %s...\n", unit_description(u));
+
return UNIT_VTABLE(u)->stop(u);
}
@@ -939,7 +945,6 @@ static void retroactively_stop_dependencies(Unit *u) {
}
void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) {
- bool unexpected = false;
dual_timestamp ts;
assert(u);
@@ -969,6 +974,7 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) {
path_unit_notify(u, ns);
if (u->meta.job) {
+ bool unexpected = false;
if (u->meta.job->state == JOB_WAITING)
@@ -1028,16 +1034,17 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) {
default:
assert_not_reached("Job type unknown");
}
- }
- /* If this state change happened without being requested by a
- * job, then let's retroactively start or stop dependencies */
+ /* If this state change happened without being
+ * requested by a job, then let's retroactively start
+ * or stop dependencies */
- if (unexpected) {
- if (UNIT_IS_INACTIVE_OR_DEACTIVATING(os) && UNIT_IS_ACTIVE_OR_ACTIVATING(ns))
- retroactively_start_dependencies(u);
- else if (UNIT_IS_ACTIVE_OR_ACTIVATING(os) && UNIT_IS_INACTIVE_OR_DEACTIVATING(ns))
- retroactively_stop_dependencies(u);
+ if (unexpected) {
+ if (UNIT_IS_INACTIVE_OR_DEACTIVATING(os) && UNIT_IS_ACTIVE_OR_ACTIVATING(ns))
+ retroactively_start_dependencies(u);
+ else if (UNIT_IS_ACTIVE_OR_ACTIVATING(os) && UNIT_IS_INACTIVE_OR_DEACTIVATING(ns))
+ retroactively_stop_dependencies(u);
+ }
}
/* Some names are special */
@@ -1997,6 +2004,29 @@ int unit_coldplug(Unit *u) {
return 0;
}
+void unit_status_printf(Unit *u, const char *format, ...) {
+ va_list ap;
+
+ assert(u);
+ assert(format);
+
+ if (!UNIT_VTABLE(u)->show_status)
+ return;
+
+ if (u->meta.manager->running_as != MANAGER_SYSTEM)
+ return;
+
+ if (!u->meta.manager->show_status)
+ return;
+
+ if (!manager_is_booting_or_shutting_down(u->meta.manager))
+ return;
+
+ va_start(ap, format);
+ status_vprintf(format, ap);
+ va_end(ap);
+}
+
static const char* const unit_type_table[_UNIT_TYPE_MAX] = {
[UNIT_SERVICE] = "service",
[UNIT_TIMER] = "timer",