diff options
-rw-r--r-- | mate-session/gsm-manager.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c index 3ffcbf3..f9bdda0 100644 --- a/mate-session/gsm-manager.c +++ b/mate-session/gsm-manager.c @@ -889,6 +889,51 @@ _client_stop (const char *id, return FALSE; } +#ifdef HAVE_SYSTEMD +static void +maybe_restart_user_bus (GsmManager *manager) +{ + GsmSystemd *systemd; + GsmManagerPrivate *priv; + GDBusConnection *connection; + + g_autoptr(GVariant) reply = NULL; + g_autoptr(GError) error = NULL; + + priv = gsm_manager_get_instance_private (manager); + if (priv->dbus_disconnected) + return; + + systemd = gsm_get_systemd (); + + if (!gsm_systemd_is_last_session_for_user (systemd)) + return; + + connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); + + if (error != NULL) { + g_debug ("GsmManager: failed to connect to session bus: %s", error->message); + return; + } + + reply = g_dbus_connection_call_sync (connection, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "TryRestartUnit", + g_variant_new ("(ss)", "dbus.service", "replace"), + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error); + + if (error != NULL) { + g_debug ("GsmManager: reloading user bus failed: %s", error->message); + } +} +#endif + static void do_phase_exit (GsmManager *manager) { @@ -901,6 +946,10 @@ do_phase_exit (GsmManager *manager) NULL); } +#ifdef HAVE_SYSTEMD + maybe_restart_user_bus (manager); +#endif + end_phase (manager); } |