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