[gdm/rhel-7.9: 23/51] manager: ensure factories are stopped at shutdown
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm/rhel-7.9: 23/51] manager: ensure factories are stopped at shutdown
- Date: Mon, 12 Apr 2021 20:58:09 +0000 (UTC)
commit d7d328bbea4bd41c64e88ca38507acfe87e36b78
Author: Ray Strode <rstrode redhat com>
Date: Fri Oct 25 09:27:15 2019 -0400
manager: ensure factories are stopped at shutdown
GDM doesn't currently stop it's display handling logic when it's
asked to shutdown.
That can lead to X servers attempting to start themsevles as GDM
is tearing itself down.
This commit addresses the problem adding some stop calls to the
code.
daemon/gdm-local-display-factory.c | 15 +++++++++++++--
daemon/gdm-manager.c | 5 +++++
2 files changed, 18 insertions(+), 2 deletions(-)
---
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
index 1c7daeb14..ad128d2c8 100644
--- a/daemon/gdm-local-display-factory.c
+++ b/daemon/gdm-local-display-factory.c
@@ -61,6 +61,8 @@ struct GdmLocalDisplayFactoryPrivate
guint seat_new_id;
guint seat_removed_id;
+
+ gboolean started;
};
enum {
@@ -260,6 +262,9 @@ on_display_status_changed (GdmDisplay *display,
gboolean is_local = TRUE;
int ret;
+ if (!factory->priv->started)
+ return;
+
num = -1;
gdm_display_get_x11_display_number (display, &num, NULL);
@@ -766,7 +771,11 @@ gdm_local_display_factory_start (GdmDisplayFactory *base_factory)
0);
gdm_local_display_factory_start_monitor (factory);
- return gdm_local_display_factory_sync_seats (factory);
+
+ gdm_local_display_factory_sync_seats (factory);
+
+ factory->priv->started = TRUE;
+ return TRUE;
}
static gboolean
@@ -788,6 +797,8 @@ gdm_local_display_factory_stop (GdmDisplayFactory *base_factory)
G_CALLBACK (on_display_removed),
factory);
+ factory->priv->started = FALSE;
+
return TRUE;
}
@@ -933,7 +944,7 @@ gdm_local_display_factory_finalize (GObject *object)
g_hash_table_destroy (factory->priv->used_display_numbers);
- gdm_local_display_factory_stop_monitor (factory);
+ gdm_local_display_factory_stop (GDM_DISPLAY_FACTORY (factory));
G_OBJECT_CLASS (gdm_local_display_factory_parent_class)->finalize (object);
}
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index 1db291587..779b716be 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -1648,6 +1648,9 @@ on_display_status_changed (GdmDisplay *display,
"session-type", &session_type,
NULL);
+ if (!manager->priv->started)
+ return;
+
status = gdm_display_get_status (display);
switch (status) {
@@ -2764,6 +2767,8 @@ gdm_manager_dispose (GObject *object)
g_return_if_fail (manager->priv != NULL);
+ gdm_manager_stop (manager);
+
#ifdef HAVE_LIBXDMCP
g_clear_object (&manager->priv->xdmcp_factory);
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]