diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-01-28 15:07:13 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-01-28 15:07:13 +0100 |
commit | 82a2b6bb5e4e5d294f09af778c48974a7857afb6 (patch) | |
tree | 37d7926f1c1e575d8e1344890953ca6a0114a011 /src/core/unit.c | |
parent | 3ad85e3775d018f32098a2957ce25e1f53440da1 (diff) |
core: output unit status output strings to console, only if we actually are changing unit state
Unit _start() and _stop() implementations can fail with -EAGAIN to delay
execution temporarily. Thus, we should not output status messages before
invoking these calls, but after, and only when we know that the
invocation actually made a change.
Diffstat (limited to 'src/core/unit.c')
-rw-r--r-- | src/core/unit.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/core/unit.c b/src/core/unit.c index 7311c5804d..23ad7c10e0 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -1423,6 +1423,7 @@ static void unit_status_log_starting_stopping_reloading(Unit *u, JobType t) { int unit_start(Unit *u) { UnitActiveState state; Unit *following; + int r; assert(u); @@ -1461,9 +1462,6 @@ int unit_start(Unit *u) { return unit_start(following); } - unit_status_log_starting_stopping_reloading(u, JOB_START); - unit_status_print_starting_stopping(u, JOB_START); - if (UNIT_VTABLE(u)->supported && !UNIT_VTABLE(u)->supported(u->manager)) return -ENOTSUP; @@ -1479,7 +1477,14 @@ int unit_start(Unit *u) { unit_add_to_dbus_queue(u); - return UNIT_VTABLE(u)->start(u); + r = UNIT_VTABLE(u)->start(u); + if (r <= 0) + return r; + + /* Log if the start function actually did something */ + unit_status_log_starting_stopping_reloading(u, JOB_START); + unit_status_print_starting_stopping(u, JOB_START); + return r; } bool unit_can_start(Unit *u) { @@ -1503,6 +1508,7 @@ bool unit_can_isolate(Unit *u) { int unit_stop(Unit *u) { UnitActiveState state; Unit *following; + int r; assert(u); @@ -1516,15 +1522,18 @@ int unit_stop(Unit *u) { return unit_stop(following); } - unit_status_log_starting_stopping_reloading(u, JOB_STOP); - unit_status_print_starting_stopping(u, JOB_STOP); - if (!UNIT_VTABLE(u)->stop) return -EBADR; unit_add_to_dbus_queue(u); - return UNIT_VTABLE(u)->stop(u); + r = UNIT_VTABLE(u)->stop(u); + if (r <= 0) + return r; + + unit_status_log_starting_stopping_reloading(u, JOB_STOP); + unit_status_print_starting_stopping(u, JOB_STOP); + return r; } /* Errors: @@ -1535,6 +1544,7 @@ int unit_stop(Unit *u) { int unit_reload(Unit *u) { UnitActiveState state; Unit *following; + int r; assert(u); @@ -1559,10 +1569,14 @@ int unit_reload(Unit *u) { return unit_reload(following); } - unit_status_log_starting_stopping_reloading(u, JOB_RELOAD); - unit_add_to_dbus_queue(u); - return UNIT_VTABLE(u)->reload(u); + + r = UNIT_VTABLE(u)->reload(u); + if (r <= 0) + return r; + + unit_status_log_starting_stopping_reloading(u, JOB_RELOAD); + return r; } bool unit_can_reload(Unit *u) { |