[systemd-devel] [PATCH 1/2] manager: connect to private bus even if $DBUS_SESSION_BUS_ADDRESS is not set

Colin Walters walters at verbum.org
Wed Oct 9 05:59:55 PDT 2013


Your patch seems to be at odds with the commit message; since
DBUS_SESSION_BUS_ADDRESS won't be set for the user bus, we won't
attempt a connection, right?

What you're really trying to fix I assume is the warning systemd outputs
when it currently spawns user@?

Note I also patched this code in
https://people.gnome.org/~walters/user-session-patches/systemd/0001-Many-fixes-for-per-user-systemd-to-be-split-up.patch

But this code doesn't really make sense at all without
https://bugs.freedesktop.org/show_bug.cgi?id=61301


On Wed, 2013-10-09 at 14:57 +0300, Mantas Mikulėnas wrote:
> Because that's exactly the kind of situation where the private bus is
> necessary.
> ---
>  src/core/manager.c | 18 +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/src/core/manager.c b/src/core/manager.c
> index 58dacdc..e183325 100644
> --- a/src/core/manager.c
> +++ b/src/core/manager.c
> @@ -485,6 +485,7 @@ static int manager_default_environment(Manager *m) {
>  int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) {
>          Manager *m;
>          int r = -ENOMEM;
> +        bool try_bus_connect = false;
>  
>          assert(_m);
>          assert(running_as >= 0);
> @@ -556,15 +557,18 @@ int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) {
>          if (r < 0)
>                  goto fail;
>  
> -        /* Try to connect to the busses, if possible. */
> -        if ((running_as == SYSTEMD_USER && getenv("DBUS_SESSION_BUS_ADDRESS")) ||
> -            running_as == SYSTEMD_SYSTEM) {
> -                r = bus_init(m, reexecuting || running_as != SYSTEMD_SYSTEM);
> -                if (r < 0)
> -                        goto fail;
> -        } else
> +        if (running_as == SYSTEMD_SYSTEM)
> +                try_bus_connect = reexecuting;
> +        else if (getenv("DBUS_SESSION_BUS_ADDRESS"))
> +                try_bus_connect = true;
> +        else
>                  log_debug("Skipping DBus session bus connection attempt - no DBUS_SESSION_BUS_ADDRESS set...");
>  
> +        /* Try to connect to the busses, if possible. */
> +        r = bus_init(m, try_bus_connect);
> +        if (r < 0)
> +                goto fail;
> +
>          m->taint_usr = dir_is_empty("/usr") > 0;
>  
>          *_m = m;




More information about the systemd-devel mailing list