[gnome-session: 1/2] manager: continue if a client exits during EndSession signal
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-session: 1/2] manager: continue if a client exits during EndSession signal
- Date: Tue, 13 Aug 2019 20:47:36 +0000 (UTC)
commit feafe51da70105039bf91317307610f1ba90b830
Author: Alexandr Miloslavskiy <alexandr miloslavskiy syntevo com>
Date: Wed May 8 15:13:22 2019 +0200
manager: continue if a client exits during EndSession signal
gnome-session/gsm-manager.c | 29 ++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
---
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index e50ba33c..d41bdcac 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -1645,7 +1645,8 @@ _disconnect_client (GsmManager *manager,
}
}
- if (manager->priv->phase == GSM_MANAGER_PHASE_QUERY_END_SESSION) {
+ switch (manager->priv->phase) {
+ case GSM_MANAGER_PHASE_QUERY_END_SESSION:
/* Instead of answering our end session query, the client just exited.
* Treat that as an "okay, end the session" answer.
*
@@ -1661,6 +1662,32 @@ _disconnect_client (GsmManager *manager,
"query end session phase "
"instead of end session "
"phase");
+ break;
+ case GSM_MANAGER_PHASE_END_SESSION:
+ if (! g_slist_find (manager->priv->query_clients, client)) {
+ /* the client sent its EndSessionResponse and we already
+ * processed it.
+ */
+ break;
+ }
+
+ /* Client exited without sending EndSessionResponse.
+ * The likely reason is that its exit code is written in a way
+ * that never returns, and sending EndSessionResponse is handled
+ * in library code after the callback. Or maybe the application
+ * crashed while handling EndSession. Or it was lazy.
+ */
+ _handle_client_end_session_response (manager,
+ client,
+ TRUE,
+ FALSE,
+ FALSE,
+ "Client exited in "
+ "end session phase without "
+ "sending EndSessionResponse");
+ default:
+ /* do nothing */
+ break;
}
if (manager->priv->dbus_disconnected && GSM_IS_DBUS_CLIENT (client)) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]