@@ -941,6 +941,41 @@ _client_stop (const char *id,
941941 return FALSE;
942942}
943943
944+ static void
945+ maybe_restart_user_bus (CsmManager * manager )
946+ {
947+ CsmSystem * system ;
948+ g_autoptr (GVariant ) reply = NULL ;
949+ g_autoptr (GError ) error = NULL ;
950+
951+ if (manager -> priv -> dbus_disconnected )
952+ return ;
953+
954+ system = csm_get_system ();
955+
956+ if (!csm_system_is_last_session_for_user (system ))
957+ return ;
958+
959+ g_debug ("CsmManager: reloading user bus" );
960+
961+ reply = g_dbus_connection_call_sync (manager -> priv -> connection ,
962+ "org.freedesktop.systemd1" ,
963+ "/org/freedesktop/systemd1" ,
964+ "org.freedesktop.systemd1.Manager" ,
965+ "StopUnit" ,
966+ g_variant_new ("(ss)" , "dbus.service" , "fail" ),
967+ NULL ,
968+ G_DBUS_CALL_FLAGS_NONE ,
969+ -1 ,
970+ NULL ,
971+ & error );
972+
973+ if (error != NULL ) {
974+ g_debug ("CsmManager: reloading user bus failed: %s" , error -> message );
975+ g_clear_error (& error );
976+ }
977+ }
978+
944979static void
945980do_phase_exit (CsmManager * manager )
946981{
@@ -949,6 +984,7 @@ do_phase_exit (CsmManager *manager)
949984 (CsmStoreFunc )_client_stop ,
950985 NULL );
951986 }
987+ maybe_restart_user_bus (manager );
952988 end_phase (manager );
953989}
954990
0 commit comments