[gdm] manager: finish off active displays when closing down



commit ebbf2bed03bac3d4d68d9ef2fc560c847a8b931a
Author: Ray Strode <rstrode redhat com>
Date:   Wed Jun 4 15:02:32 2014 -0400

    manager: finish off active displays when closing down
    
    If the daemon is killed while sitting a the log in screen,
    we never actually unmanage the display, and instead die
    of an assertion failure in gdm_display_dispose.
    
    This commit makes sure the X server is killed off properly.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=731234

 daemon/gdm-manager.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)
---
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index dbcc8bc..60f43b0 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -2287,6 +2287,18 @@ unexport_display (const char *id,
 }
 
 static void
+finish_display (const char *id,
+                GdmDisplay *display,
+                GdmManager *manager)
+{
+        if (gdm_display_get_status (display) != GDM_DISPLAY_MANAGED)
+                return;
+
+        gdm_display_unmanage (display);
+        gdm_display_finish (display);
+}
+
+static void
 gdm_manager_finalize (GObject *object)
 {
         GdmManager *manager;
@@ -2321,6 +2333,10 @@ gdm_manager_finalize (GObject *object)
                 g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (manager));
         }
 
+        gdm_display_store_foreach (manager->priv->display_store,
+                                   (GdmDisplayStoreFunc) finish_display,
+                                   manager);
+
         gdm_display_store_clear (manager->priv->display_store);
 
         g_dbus_object_manager_server_set_connection (manager->priv->object_manager, NULL);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]