diff options
author | Ray Strode <rstrode@redhat.com> | 2021-09-15 11:23:17 -0400 |
---|---|---|
committer | Ray Strode <halfline@gmail.com> | 2021-09-29 13:58:07 +0000 |
commit | 2e22ac85d52b2fe68949f7af4e27331e6714309c (patch) | |
tree | c74bc14291ca31d269e7061654a53711349226c1 /daemon | |
parent | 3745842badeb2f45dd74343f3d8e1b12df77d61e (diff) | |
download | gdm-2e22ac85d52b2fe68949f7af4e27331e6714309c.tar.gz |
local-display-factory: Don't try to respawn displays on shutdown
At the moment in the shutdown path we may try to respawn displays
that just got killed.
The respawning happens when things are half torn down leading to
crashes.
This commit makes sure we turn off the respawn logic in the shutdown
path.
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/gdm-local-display-factory.c | 11 | ||||
-rw-r--r-- | daemon/gdm-manager.c | 2 |
2 files changed, 12 insertions, 1 deletions
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c index eba38671..5fbbad68 100644 --- a/daemon/gdm-local-display-factory.c +++ b/daemon/gdm-local-display-factory.c @@ -73,6 +73,8 @@ struct _GdmLocalDisplayFactory guint active_vt_watch_id; guint wait_to_finish_timeout_id; #endif + + gboolean is_started; }; enum { @@ -505,6 +507,10 @@ on_display_status_changed (GdmDisplay *display, gboolean is_initial = TRUE; gboolean is_local = TRUE; + + if (!factory->is_started) + return; + num = -1; gdm_display_get_x11_display_number (display, &num, NULL); @@ -1270,6 +1276,8 @@ gdm_local_display_factory_start (GdmDisplayFactory *base_factory) g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); + factory->is_started = TRUE; + store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory)); g_signal_connect_object (G_OBJECT (store), @@ -1306,9 +1314,10 @@ gdm_local_display_factory_stop (GdmDisplayFactory *base_factory) g_signal_handlers_disconnect_by_func (G_OBJECT (store), G_CALLBACK (on_display_removed), factory); - g_clear_handle_id (&factory->seat0_graphics_check_timeout_id, g_source_remove); + factory->is_started = FALSE; + return TRUE; } diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c index 4c2752fe..cc61efc9 100644 --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c @@ -2768,6 +2768,8 @@ gdm_manager_dispose (GObject *object) g_return_if_fail (manager->priv != NULL); + gdm_manager_stop (manager); + g_clear_weak_pointer (&manager->priv->automatic_login_display); #ifdef HAVE_LIBXDMCP |