From: Michal Sekletar Date: Fri, 8 Sep 2017 13:41:44 +0000 (+0200) Subject: manager: when reexecuting try to connect to bus only when dbus.service is around... X-Git-Tag: v235~141 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5463fa0a88f95d2002858592578f9bf4e0d2660a;p=thirdparty%2Fsystemd.git manager: when reexecuting try to connect to bus only when dbus.service is around (#6773) Trying to connect otherwise is pointless, because if socket isn't around we won't connect. However, when dbus.socket is present we attempt to connect. That attempt can't succeed because we are then supposed to activate dbus.service as a response to connection from us. This results in deadlock. Fixes #6303 --- diff --git a/src/core/manager.c b/src/core/manager.c index 939d117ad1e..b4c252a1355 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -921,15 +921,19 @@ static int manager_setup_user_lookup_fd(Manager *m) { static int manager_connect_bus(Manager *m, bool reexecuting) { bool try_bus_connect; + Unit *u = NULL; assert(m); if (m->test_run) return 0; + u = manager_get_unit(m, SPECIAL_DBUS_SERVICE); + try_bus_connect = - reexecuting || - (MANAGER_IS_USER(m) && getenv("DBUS_SESSION_BUS_ADDRESS")); + (u && UNIT_IS_ACTIVE_OR_RELOADING(unit_active_state(u))) && + (reexecuting || + (MANAGER_IS_USER(m) && getenv("DBUS_SESSION_BUS_ADDRESS"))); /* Try to connect to the buses, if possible. */ return bus_init(m, try_bus_connect);