[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