From: Yu Watanabe Date: Sat, 8 Dec 2018 09:33:38 +0000 (+0900) Subject: systemctl: check triggering units only for stopped units X-Git-Tag: v240~104 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=416b88013c94c764cde988e9518f97eb21cdf209;p=thirdparty%2Fsystemd.git systemctl: check triggering units only for stopped units Fixes #11088. --- diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 19f49a5ae62..40fcb2cae3e 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -3090,6 +3090,7 @@ static int start_unit(int argc, char *argv[], void *userdata) { _cleanup_(bus_wait_for_jobs_freep) BusWaitForJobs *w = NULL; _cleanup_(wait_context_free) WaitContext wait_context = {}; const char *method, *mode, *one_name, *suffix = NULL; + _cleanup_free_ char **stopped_units = NULL; /* Do not use _cleanup_strv_free_ */ _cleanup_strv_free_ char **names = NULL; int r, ret = EXIT_SUCCESS; sd_bus *bus; @@ -3186,6 +3187,12 @@ static int start_unit(int argc, char *argv[], void *userdata) { r = start_unit_one(bus, method, *name, mode, &error, w, arg_wait ? &wait_context : NULL); if (ret == EXIT_SUCCESS && r < 0) ret = translate_bus_error_to_exit_status(r, &error); + + if (r >= 0 && streq(method, "StopUnit")) { + r = strv_push(&stopped_units, *name); + if (r < 0) + return log_oom(); + } } if (!arg_no_block) { @@ -3210,8 +3217,8 @@ static int start_unit(int argc, char *argv[], void *userdata) { /* When stopping units, warn if they can still be triggered by * another active unit (socket, path, timer) */ - if (!arg_quiet && streq(method, "StopUnit")) - STRV_FOREACH(name, names) + if (!arg_quiet) + STRV_FOREACH(name, stopped_units) (void) check_triggering_units(bus, *name); }