Blob Blame History Raw
From 7d333c2eff424bfae19ca6ca59835fd65fb919cc Mon Sep 17 00:00:00 2001
From: Colin Walters <walters@verbum.org>
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