[systemd-devel] [PATCH 1/3] systemctl: check for triggering units before calling StopUnit

Lennart Poettering lennart at poettering.net
Wed Sep 11 11:04:38 PDT 2013


On Fri, 09.08.13 16:00, Michal Sekletar (msekleta at redhat.com) wrote:

Heya,

Hmm, so what I don't really like about this patch is that the stop might
have caused the triggering units also to go away via some deps. If we
check the triggers before executing the operations we will never take
that into account. (Note that so far the trigger message is delayed
after the job succeeded in order to make sure we can take the full
a-posteriori state into account).

So not sure, Zbigniew, do you have an opinion on this?

(Also, Michal, what about the other patches from this series, are they
still relevant? I amnot sure if you pulled them back or not, the thread
confused me....)

Lennart

> 
> >From a62d3668fb2513b1ece827520d44d5b7cd560407 Mon Sep 17 00:00:00 2001
> From: Michal Sekletar <msekleta at redhat.com>
> Date: Thu, 8 Aug 2013 13:26:56 +0200
> Subject: [PATCH 1/3] systemctl: check for triggering units before calling
>  StopUnit
> 
> Rearranging the code in a way that we always check for triggers before
> we issue StopUnit D-Bus call. This will make behavior consistent,
> because triggers are always checked.
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=908690
> ---
>  src/systemctl/systemctl.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
> index 8ec1824..ee47841 100644
> --- a/src/systemctl/systemctl.c
> +++ b/src/systemctl/systemctl.c
> @@ -1980,6 +1980,16 @@ static int start_unit(DBusConnection *bus, char **args) {
>                          return log_oom();
>          }
>  
> +        /* When stopping units, warn if they can still be triggered by
> +         * another active unit (socket, path, timer) */
> +        if (!arg_quiet && streq(method, "StopUnit")) {
> +                if (one_name)
> +                        check_triggering_units(bus, one_name);
> +                else
> +                        STRV_FOREACH(name, args+1)
> +                                check_triggering_units(bus, *name);
> +        }
> +
>          if (one_name) {
>                  ret = start_unit_one(bus, method, one_name, mode, &error, s);
>                  if (ret < 0)
> @@ -1998,16 +2008,6 @@ static int start_unit(DBusConnection *bus, char **args) {
>                  r = wait_for_jobs(bus, s);
>                  if (r < 0)
>                          return r;
> -
> -                /* When stopping units, warn if they can still be triggered by
> -                 * another active unit (socket, path, timer) */
> -                if (!arg_quiet && streq(method, "StopUnit")) {
> -                        if (one_name)
> -                                check_triggering_units(bus, one_name);
> -                        else
> -                                STRV_FOREACH(name, args+1)
> -                                        check_triggering_units(bus, *name);
> -                }
>          }
>  
>          return ret;


Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the systemd-devel mailing list