From 7d333c2eff424bfae19ca6ca59835fd65fb919cc Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 18 Oct 2013 18:15:14 -0400 Subject: [PATCH] gsm-manager: Don't abort when all clients exit If all of our clients exit, remove_clients_for_connection() calls end_phase() which in turn invokes gsm_manager_quit() that checks the logout type. But at this point we only have _LOGOUT_NONE, so we end up aborting. It's fine to just call _quit() in this case, and this avoids us dumping core. This was happening to me when session startup failed for other reasons. https://bugzilla.gnome.org/show_bug.cgi?id=710480 --- gnome-session/gsm-manager.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c index f6ccb62..57cbb36 100644 --- a/gnome-session/gsm-manager.c +++ b/gnome-session/gsm-manager.c @@ -465,60 +465,61 @@ phase_num_to_name (guint phase) case GSM_MANAGER_PHASE_RUNNING: name = "RUNNING"; break; case GSM_MANAGER_PHASE_QUERY_END_SESSION: name = "QUERY_END_SESSION"; break; case GSM_MANAGER_PHASE_END_SESSION: name = "END_SESSION"; break; case GSM_MANAGER_PHASE_EXIT: name = "EXIT"; break; default: g_assert_not_reached (); break; } return name; } static void start_phase (GsmManager *manager); static void gsm_manager_quit (GsmManager *manager) { /* See the comment in request_reboot() for some more details about how * this works. */ switch (manager->priv->logout_type) { case GSM_MANAGER_LOGOUT_LOGOUT: + case GSM_MANAGER_LOGOUT_NONE: gtk_main_quit (); break; case GSM_MANAGER_LOGOUT_REBOOT: case GSM_MANAGER_LOGOUT_REBOOT_INTERACT: gdm_set_logout_action (GDM_LOGOUT_ACTION_NONE); gsm_system_complete_shutdown (manager->priv->system); break; case GSM_MANAGER_LOGOUT_REBOOT_GDM: gdm_set_logout_action (GDM_LOGOUT_ACTION_REBOOT); gtk_main_quit (); break; case GSM_MANAGER_LOGOUT_SHUTDOWN: case GSM_MANAGER_LOGOUT_SHUTDOWN_INTERACT: gdm_set_logout_action (GDM_LOGOUT_ACTION_NONE); gsm_system_complete_shutdown (manager->priv->system); break; case GSM_MANAGER_LOGOUT_SHUTDOWN_GDM: gdm_set_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN); gtk_main_quit (); break; default: g_assert_not_reached (); break; } } static gboolean do_query_end_session_exit (GsmManager *manager); static void end_phase (GsmManager *manager) -- 1.8.4.2