Blame SOURCES/0001-daemon-Don-t-error-on-shutdown.patch

eb421d
From fbdb5fdfc5f4c5569643239cae1d6fe5fac13717 Mon Sep 17 00:00:00 2001
eb421d
From: Ray Strode <rstrode@redhat.com>
eb421d
Date: Mon, 12 Dec 2022 10:52:58 -0500
eb421d
Subject: [PATCH] daemon: Don't error on shutdown
eb421d
eb421d
Right now we complain if shutdown happens while the display is
eb421d
comming up.
eb421d
eb421d
This commit detects that case and avoids the error in that case.
eb421d
---
eb421d
 daemon/gdm-display.c | 28 +++++++++++++++++++++++++++-
eb421d
 daemon/gdm-manager.c | 11 +++++++----
eb421d
 2 files changed, 34 insertions(+), 5 deletions(-)
eb421d
eb421d
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
eb421d
index 9438fe72..a93857e9 100644
eb421d
--- a/daemon/gdm-display.c
eb421d
+++ b/daemon/gdm-display.c
eb421d
@@ -66,86 +66,88 @@ typedef struct _GdmDisplayPrivate
eb421d
         char                 *x11_display_name;
eb421d
         int                   status;
eb421d
         time_t                creation_time;
eb421d
 
eb421d
         char                 *x11_cookie;
eb421d
         gsize                 x11_cookie_size;
eb421d
         GdmDisplayAccessFile *access_file;
eb421d
 
eb421d
         guint                 finish_idle_id;
eb421d
 
eb421d
         xcb_connection_t     *xcb_connection;
eb421d
         int                   xcb_screen_number;
eb421d
 
eb421d
         GDBusConnection      *connection;
eb421d
         GdmDisplayAccessFile *user_access_file;
eb421d
 
eb421d
         GdmDBusDisplay       *display_skeleton;
eb421d
         GDBusObjectSkeleton  *object_skeleton;
eb421d
 
eb421d
         GDBusProxy           *accountsservice_proxy;
eb421d
 
eb421d
         /* this spawns and controls the greeter session */
eb421d
         GdmLaunchEnvironment *launch_environment;
eb421d
 
eb421d
         guint                 is_local : 1;
eb421d
         guint                 is_initial : 1;
eb421d
         guint                 allow_timed_login : 1;
eb421d
         guint                 have_existing_user_accounts : 1;
eb421d
         guint                 doing_initial_setup : 1;
eb421d
         guint                 session_registered : 1;
eb421d
+        guint                 shutting_down : 1;
eb421d
 
eb421d
         GStrv                 supported_session_types;
eb421d
 } GdmDisplayPrivate;
eb421d
 
eb421d
 enum {
eb421d
         PROP_0,
eb421d
         PROP_ID,
eb421d
         PROP_STATUS,
eb421d
         PROP_SEAT_ID,
eb421d
         PROP_SESSION_ID,
eb421d
         PROP_SESSION_CLASS,
eb421d
         PROP_SESSION_TYPE,
eb421d
         PROP_REMOTE_HOSTNAME,
eb421d
         PROP_X11_DISPLAY_NUMBER,
eb421d
         PROP_X11_DISPLAY_NAME,
eb421d
         PROP_X11_COOKIE,
eb421d
         PROP_X11_AUTHORITY_FILE,
eb421d
         PROP_IS_CONNECTED,
eb421d
         PROP_IS_LOCAL,
eb421d
         PROP_LAUNCH_ENVIRONMENT,
eb421d
         PROP_IS_INITIAL,
eb421d
         PROP_ALLOW_TIMED_LOGIN,
eb421d
         PROP_HAVE_EXISTING_USER_ACCOUNTS,
eb421d
         PROP_DOING_INITIAL_SETUP,
eb421d
         PROP_SESSION_REGISTERED,
eb421d
         PROP_SUPPORTED_SESSION_TYPES,
eb421d
+        PROP_SHUTTING_DOWN,
eb421d
 };
eb421d
 
eb421d
 static void     gdm_display_class_init  (GdmDisplayClass *klass);
eb421d
 static void     gdm_display_init        (GdmDisplay      *self);
eb421d
 static void     gdm_display_finalize    (GObject         *object);
eb421d
 static void     queue_finish            (GdmDisplay      *self);
eb421d
 static void     _gdm_display_set_status (GdmDisplay *self,
eb421d
                                          int         status);
eb421d
 static gboolean wants_initial_setup (GdmDisplay *self);
eb421d
 G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GdmDisplay, gdm_display, G_TYPE_OBJECT)
eb421d
 
eb421d
 GQuark
eb421d
 gdm_display_error_quark (void)
eb421d
 {
eb421d
         static GQuark ret = 0;
eb421d
         if (ret == 0) {
eb421d
                 ret = g_quark_from_static_string ("gdm_display_error");
eb421d
         }
eb421d
 
eb421d
         return ret;
eb421d
 }
eb421d
 
eb421d
 time_t
eb421d
 gdm_display_get_creation_time (GdmDisplay *self)
eb421d
 {
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         g_return_val_if_fail (GDM_IS_DISPLAY (self), 0);
eb421d
 
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
@@ -665,61 +667,61 @@ gdm_display_disconnect (GdmDisplay *self)
eb421d
         }
eb421d
 
eb421d
         xcb_flush (priv->xcb_connection);
eb421d
 
eb421d
         g_clear_pointer (&priv->xcb_connection, xcb_disconnect);
eb421d
 }
eb421d
 
eb421d
 gboolean
eb421d
 gdm_display_unmanage (GdmDisplay *self)
eb421d
 {
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         g_return_val_if_fail (GDM_IS_DISPLAY (self), FALSE);
eb421d
 
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
 
eb421d
         gdm_display_disconnect (self);
eb421d
 
eb421d
         if (priv->user_access_file != NULL) {
eb421d
                 gdm_display_access_file_close (priv->user_access_file);
eb421d
                 g_object_unref (priv->user_access_file);
eb421d
                 priv->user_access_file = NULL;
eb421d
         }
eb421d
 
eb421d
         if (priv->access_file != NULL) {
eb421d
                 gdm_display_access_file_close (priv->access_file);
eb421d
                 g_object_unref (priv->access_file);
eb421d
                 priv->access_file = NULL;
eb421d
         }
eb421d
 
eb421d
-        if (!priv->session_registered) {
eb421d
+        if (!priv->session_registered && !priv->shutting_down) {
eb421d
                 g_warning ("GdmDisplay: Session never registered, failing");
eb421d
                 _gdm_display_set_status (self, GDM_DISPLAY_FAILED);
eb421d
         } else {
eb421d
                 _gdm_display_set_status (self, GDM_DISPLAY_UNMANAGED);
eb421d
         }
eb421d
 
eb421d
         return TRUE;
eb421d
 }
eb421d
 
eb421d
 gboolean
eb421d
 gdm_display_get_id (GdmDisplay         *self,
eb421d
                     char              **id,
eb421d
                     GError            **error)
eb421d
 {
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         g_return_val_if_fail (GDM_IS_DISPLAY (self), FALSE);
eb421d
 
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
         if (id != NULL) {
eb421d
                 *id = g_strdup (priv->id);
eb421d
         }
eb421d
 
eb421d
         return TRUE;
eb421d
 }
eb421d
 
eb421d
 gboolean
eb421d
 gdm_display_get_x11_display_name (GdmDisplay   *self,
eb421d
                                   char        **x11_display,
eb421d
                                   GError      **error)
eb421d
@@ -851,60 +853,70 @@ _gdm_display_set_x11_cookie (GdmDisplay     *self,
eb421d
 {
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
         g_free (priv->x11_cookie);
eb421d
         priv->x11_cookie = g_strdup (x11_cookie);
eb421d
 }
eb421d
 
eb421d
 static void
eb421d
 _gdm_display_set_is_local (GdmDisplay     *self,
eb421d
                            gboolean        is_local)
eb421d
 {
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
         g_debug ("GdmDisplay: local: %s", is_local? "yes" : "no");
eb421d
         priv->is_local = is_local;
eb421d
 }
eb421d
 
eb421d
 static void
eb421d
 _gdm_display_set_session_registered (GdmDisplay     *self,
eb421d
                                      gboolean        registered)
eb421d
 {
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
         g_debug ("GdmDisplay: session registered: %s", registered? "yes" : "no");
eb421d
         priv->session_registered = registered;
eb421d
 }
eb421d
 
eb421d
+static void
eb421d
+_gdm_display_set_shutting_down (GdmDisplay     *self,
eb421d
+                                gboolean        shutting_down)
eb421d
+{
eb421d
+        GdmDisplayPrivate *priv;
eb421d
+
eb421d
+        priv = gdm_display_get_instance_private (self);
eb421d
+        priv->shutting_down = shutting_down;
eb421d
+}
eb421d
+
eb421d
 static void
eb421d
 _gdm_display_set_launch_environment (GdmDisplay           *self,
eb421d
                                      GdmLaunchEnvironment *launch_environment)
eb421d
 {
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
 
eb421d
         g_clear_object (&priv->launch_environment);
eb421d
 
eb421d
         priv->launch_environment = g_object_ref (launch_environment);
eb421d
 }
eb421d
 
eb421d
 static void
eb421d
 _gdm_display_set_is_initial (GdmDisplay     *self,
eb421d
                              gboolean        initial)
eb421d
 {
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
         g_debug ("GdmDisplay: initial: %s", initial? "yes" : "no");
eb421d
         priv->is_initial = initial;
eb421d
 }
eb421d
 
eb421d
 static void
eb421d
 _gdm_display_set_allow_timed_login (GdmDisplay     *self,
eb421d
                                     gboolean        allow_timed_login)
eb421d
 {
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
@@ -962,60 +974,63 @@ gdm_display_set_property (GObject        *object,
eb421d
         case PROP_REMOTE_HOSTNAME:
eb421d
                 _gdm_display_set_remote_hostname (self, g_value_get_string (value));
eb421d
                 break;
eb421d
         case PROP_X11_DISPLAY_NUMBER:
eb421d
                 _gdm_display_set_x11_display_number (self, g_value_get_int (value));
eb421d
                 break;
eb421d
         case PROP_X11_DISPLAY_NAME:
eb421d
                 _gdm_display_set_x11_display_name (self, g_value_get_string (value));
eb421d
                 break;
eb421d
         case PROP_X11_COOKIE:
eb421d
                 _gdm_display_set_x11_cookie (self, g_value_get_string (value));
eb421d
                 break;
eb421d
         case PROP_IS_LOCAL:
eb421d
                 _gdm_display_set_is_local (self, g_value_get_boolean (value));
eb421d
                 break;
eb421d
         case PROP_ALLOW_TIMED_LOGIN:
eb421d
                 _gdm_display_set_allow_timed_login (self, g_value_get_boolean (value));
eb421d
                 break;
eb421d
         case PROP_LAUNCH_ENVIRONMENT:
eb421d
                 _gdm_display_set_launch_environment (self, g_value_get_object (value));
eb421d
                 break;
eb421d
         case PROP_IS_INITIAL:
eb421d
                 _gdm_display_set_is_initial (self, g_value_get_boolean (value));
eb421d
                 break;
eb421d
         case PROP_SESSION_REGISTERED:
eb421d
                 _gdm_display_set_session_registered (self, g_value_get_boolean (value));
eb421d
                 break;
eb421d
         case PROP_SUPPORTED_SESSION_TYPES:
eb421d
                 _gdm_display_set_supported_session_types (self, g_value_get_boxed (value));
eb421d
                 break;
eb421d
+        case PROP_SHUTTING_DOWN:
eb421d
+                _gdm_display_set_shutting_down (self, g_value_get_boolean (value));
eb421d
+                break;
eb421d
         default:
eb421d
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
eb421d
                 break;
eb421d
         }
eb421d
 }
eb421d
 
eb421d
 static void
eb421d
 gdm_display_get_property (GObject        *object,
eb421d
                           guint           prop_id,
eb421d
                           GValue         *value,
eb421d
                           GParamSpec     *pspec)
eb421d
 {
eb421d
         GdmDisplay *self;
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         self = GDM_DISPLAY (object);
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
 
eb421d
         switch (prop_id) {
eb421d
         case PROP_ID:
eb421d
                 g_value_set_string (value, priv->id);
eb421d
                 break;
eb421d
         case PROP_STATUS:
eb421d
                 g_value_set_int (value, priv->status);
eb421d
                 break;
eb421d
         case PROP_SEAT_ID:
eb421d
                 g_value_set_string (value, priv->seat_id);
eb421d
                 break;
eb421d
         case PROP_SESSION_ID:
eb421d
                 g_value_set_string (value, priv->session_id);
eb421d
@@ -1043,60 +1058,63 @@ gdm_display_get_property (GObject        *object,
eb421d
                                      priv->access_file?
eb421d
                                      gdm_display_access_file_get_path (priv->access_file) : NULL);
eb421d
                 break;
eb421d
         case PROP_IS_LOCAL:
eb421d
                 g_value_set_boolean (value, priv->is_local);
eb421d
                 break;
eb421d
         case PROP_IS_CONNECTED:
eb421d
                 g_value_set_boolean (value, priv->xcb_connection != NULL);
eb421d
                 break;
eb421d
         case PROP_LAUNCH_ENVIRONMENT:
eb421d
                 g_value_set_object (value, priv->launch_environment);
eb421d
                 break;
eb421d
         case PROP_IS_INITIAL:
eb421d
                 g_value_set_boolean (value, priv->is_initial);
eb421d
                 break;
eb421d
         case PROP_HAVE_EXISTING_USER_ACCOUNTS:
eb421d
                 g_value_set_boolean (value, priv->have_existing_user_accounts);
eb421d
                 break;
eb421d
         case PROP_DOING_INITIAL_SETUP:
eb421d
                 g_value_set_boolean (value, priv->doing_initial_setup);
eb421d
                 break;
eb421d
         case PROP_SESSION_REGISTERED:
eb421d
                 g_value_set_boolean (value, priv->session_registered);
eb421d
                 break;
eb421d
         case PROP_ALLOW_TIMED_LOGIN:
eb421d
                 g_value_set_boolean (value, priv->allow_timed_login);
eb421d
                 break;
eb421d
         case PROP_SUPPORTED_SESSION_TYPES:
eb421d
                 g_value_set_boxed (value, priv->supported_session_types);
eb421d
                 break;
eb421d
+        case PROP_SHUTTING_DOWN:
eb421d
+                g_value_set_boolean (value, priv->shutting_down);
eb421d
+                break;
eb421d
         default:
eb421d
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
eb421d
                 break;
eb421d
         }
eb421d
 }
eb421d
 
eb421d
 static gboolean
eb421d
 handle_get_id (GdmDBusDisplay        *skeleton,
eb421d
                GDBusMethodInvocation *invocation,
eb421d
                GdmDisplay            *self)
eb421d
 {
eb421d
         char *id;
eb421d
 
eb421d
         gdm_display_get_id (self, &id, NULL);
eb421d
 
eb421d
         gdm_dbus_display_complete_get_id (skeleton, invocation, id);
eb421d
 
eb421d
         g_free (id);
eb421d
         return TRUE;
eb421d
 }
eb421d
 
eb421d
 static gboolean
eb421d
 handle_get_remote_hostname (GdmDBusDisplay        *skeleton,
eb421d
                             GDBusMethodInvocation *invocation,
eb421d
                             GdmDisplay            *self)
eb421d
 {
eb421d
         char *hostname;
eb421d
 
eb421d
         gdm_display_get_remote_hostname (self, &hostname, NULL);
eb421d
 
eb421d
@@ -1397,60 +1415,68 @@ gdm_display_class_init (GdmDisplayClass *klass)
eb421d
                                          g_param_spec_boolean ("session-registered",
eb421d
                                                                NULL,
eb421d
                                                                NULL,
eb421d
                                                                FALSE,
eb421d
                                                                G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
eb421d
 
eb421d
         g_object_class_install_property (object_class,
eb421d
                                          PROP_LAUNCH_ENVIRONMENT,
eb421d
                                          g_param_spec_object ("launch-environment",
eb421d
                                                               NULL,
eb421d
                                                               NULL,
eb421d
                                                               GDM_TYPE_LAUNCH_ENVIRONMENT,
eb421d
                                                               G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
eb421d
         g_object_class_install_property (object_class,
eb421d
                                          PROP_STATUS,
eb421d
                                          g_param_spec_int ("status",
eb421d
                                                            "status",
eb421d
                                                            "status",
eb421d
                                                            -1,
eb421d
                                                            G_MAXINT,
eb421d
                                                            GDM_DISPLAY_UNMANAGED,
eb421d
                                                            G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
eb421d
 
eb421d
         g_object_class_install_property (object_class,
eb421d
                                          PROP_SUPPORTED_SESSION_TYPES,
eb421d
                                          g_param_spec_boxed ("supported-session-types",
eb421d
                                                              "supported session types",
eb421d
                                                              "supported session types",
eb421d
                                                              G_TYPE_STRV,
eb421d
                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
eb421d
+
eb421d
+        g_object_class_install_property (object_class,
eb421d
+                                         PROP_SHUTTING_DOWN,
eb421d
+                                         g_param_spec_boolean ("shutting-down",
eb421d
+                                                               NULL,
eb421d
+                                                               NULL,
eb421d
+                                                               FALSE,
eb421d
+                                                               G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
eb421d
 }
eb421d
 
eb421d
 static void
eb421d
 gdm_display_init (GdmDisplay *self)
eb421d
 {
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
 
eb421d
         priv->creation_time = time (NULL);
eb421d
 }
eb421d
 
eb421d
 static void
eb421d
 gdm_display_finalize (GObject *object)
eb421d
 {
eb421d
         GdmDisplay *self;
eb421d
         GdmDisplayPrivate *priv;
eb421d
 
eb421d
         g_return_if_fail (object != NULL);
eb421d
         g_return_if_fail (GDM_IS_DISPLAY (object));
eb421d
 
eb421d
         self = GDM_DISPLAY (object);
eb421d
         priv = gdm_display_get_instance_private (self);
eb421d
 
eb421d
         g_return_if_fail (priv != NULL);
eb421d
 
eb421d
         g_debug ("GdmDisplay: Finalizing display: %s", priv->id);
eb421d
         g_free (priv->id);
eb421d
         g_free (priv->seat_id);
eb421d
         g_free (priv->session_class);
eb421d
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
eb421d
index c70248f3..05851001 100644
eb421d
--- a/daemon/gdm-manager.c
eb421d
+++ b/daemon/gdm-manager.c
eb421d
@@ -2759,117 +2759,120 @@ gdm_manager_init (GdmManager *manager)
eb421d
                                                                                NULL,
eb421d
                                                                                (GDestroyNotify)
eb421d
                                                                                g_object_unref);
eb421d
         manager->priv->transient_sessions = g_hash_table_new_full (NULL,
eb421d
                                                                    NULL,
eb421d
                                                                    (GDestroyNotify)
eb421d
                                                                    NULL,
eb421d
                                                                    (GDestroyNotify)
eb421d
                                                                    g_object_unref);
eb421d
         g_signal_connect (G_OBJECT (manager->priv->display_store),
eb421d
                           "display-added",
eb421d
                           G_CALLBACK (on_display_added),
eb421d
                           manager);
eb421d
 
eb421d
         g_signal_connect (G_OBJECT (manager->priv->display_store),
eb421d
                           "display-removed",
eb421d
                           G_CALLBACK (on_display_removed),
eb421d
                           manager);
eb421d
 }
eb421d
 
eb421d
 static void
eb421d
 unexport_display (const char *id,
eb421d
                   GdmDisplay *display,
eb421d
                   GdmManager *manager)
eb421d
 {
eb421d
         if (!g_dbus_connection_is_closed (manager->priv->connection))
eb421d
                 g_dbus_object_manager_server_unexport (manager->priv->object_manager, id);
eb421d
 }
eb421d
 
eb421d
 static void
eb421d
-finish_display (const char *id,
eb421d
-                GdmDisplay *display,
eb421d
-                GdmManager *manager)
eb421d
+shut_down_display (const char *id,
eb421d
+                   GdmDisplay *display,
eb421d
+                   GdmManager *manager)
eb421d
 {
eb421d
         gdm_display_stop_greeter_session (display);
eb421d
+
eb421d
+        g_object_set (G_OBJECT (display), "shutting-down", TRUE, NULL);
eb421d
+
eb421d
         if (gdm_display_get_status (display) == GDM_DISPLAY_MANAGED)
eb421d
                 gdm_display_unmanage (display);
eb421d
         gdm_display_finish (display);
eb421d
 }
eb421d
 
eb421d
 static void
eb421d
 gdm_manager_dispose (GObject *object)
eb421d
 {
eb421d
         GdmManager *manager;
eb421d
 
eb421d
         g_return_if_fail (object != NULL);
eb421d
         g_return_if_fail (GDM_IS_MANAGER (object));
eb421d
 
eb421d
         manager = GDM_MANAGER (object);
eb421d
 
eb421d
         g_return_if_fail (manager->priv != NULL);
eb421d
 
eb421d
         gdm_manager_stop (manager);
eb421d
 
eb421d
         g_clear_weak_pointer (&manager->priv->automatic_login_display);
eb421d
 
eb421d
 #ifdef HAVE_LIBXDMCP
eb421d
         g_clear_object (&manager->priv->xdmcp_factory);
eb421d
 #endif
eb421d
         g_clear_object (&manager->priv->local_factory);
eb421d
         g_clear_pointer (&manager->priv->open_reauthentication_requests,
eb421d
                          g_hash_table_unref);
eb421d
         g_clear_pointer (&manager->priv->transient_sessions,
eb421d
                          g_hash_table_unref);
eb421d
 
eb421d
         g_list_foreach (manager->priv->user_sessions,
eb421d
                         (GFunc) gdm_session_close,
eb421d
                         NULL);
eb421d
         g_list_free_full (manager->priv->user_sessions, (GDestroyNotify) g_object_unref);
eb421d
         manager->priv->user_sessions = NULL;
eb421d
 
eb421d
         g_signal_handlers_disconnect_by_func (G_OBJECT (manager->priv->display_store),
eb421d
                                               G_CALLBACK (on_display_added),
eb421d
                                               manager);
eb421d
         g_signal_handlers_disconnect_by_func (G_OBJECT (manager->priv->display_store),
eb421d
                                               G_CALLBACK (on_display_removed),
eb421d
                                               manager);
eb421d
 
eb421d
         if (!g_dbus_connection_is_closed (manager->priv->connection)) {
eb421d
                 gdm_display_store_foreach (manager->priv->display_store,
eb421d
                                            (GdmDisplayStoreFunc)unexport_display,
eb421d
                                            manager);
eb421d
                 g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (manager));
eb421d
         }
eb421d
 
eb421d
         gdm_display_store_foreach (manager->priv->display_store,
eb421d
-                                   (GdmDisplayStoreFunc) finish_display,
eb421d
+                                   (GdmDisplayStoreFunc) shut_down_display,
eb421d
                                    manager);
eb421d
 
eb421d
         gdm_display_store_clear (manager->priv->display_store);
eb421d
 
eb421d
         g_dbus_object_manager_server_set_connection (manager->priv->object_manager, NULL);
eb421d
 
eb421d
         g_clear_object (&manager->priv->connection);
eb421d
         g_clear_object (&manager->priv->object_manager);
eb421d
         g_clear_object (&manager->priv->display_store);
eb421d
 
eb421d
         G_OBJECT_CLASS (gdm_manager_parent_class)->dispose (object);
eb421d
 }
eb421d
 
eb421d
 GdmManager *
eb421d
 gdm_manager_new (void)
eb421d
 {
eb421d
         if (manager_object != NULL) {
eb421d
                 g_object_ref (manager_object);
eb421d
         } else {
eb421d
                 gboolean res;
eb421d
 
eb421d
                 manager_object = g_object_new (GDM_TYPE_MANAGER, NULL);
eb421d
                 g_object_add_weak_pointer (manager_object,
eb421d
                                            (gpointer *) &manager_object);
eb421d
                 res = register_manager (manager_object);
eb421d
                 if (! res) {
eb421d
                         g_object_unref (manager_object);
eb421d
                         return NULL;
eb421d
                 }
eb421d
         }
eb421d
-- 
eb421d
2.37.0.rc1
eb421d