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