[gnome-session/f18] Add upstream patch to fix handling of client registration during shutdown
Daniel Drake
dsd at fedoraproject.org
Tue Nov 13 14:59:40 UTC 2012
commit 27abc3d717c7160619bbb542e174cb93f9881726
Author: Daniel Drake <dsd at laptop.org>
Date: Tue Nov 13 08:52:33 2012 -0600
Add upstream patch to fix handling of client registration during shutdown
gnome-session.spec | 8 ++-
reject-shutdown-clients.patch | 172 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 179 insertions(+), 1 deletions(-)
---
diff --git a/gnome-session.spec b/gnome-session.spec
index 7cceb1d..56a3f09 100644
--- a/gnome-session.spec
+++ b/gnome-session.spec
@@ -3,7 +3,7 @@
Summary: GNOME session manager
Name: gnome-session
Version: 3.6.2
-Release: 1%{?dist}
+Release: 2%{?dist}
URL: http://www.gnome.org
#VCS: git:git://git.gnome.org/gnome-session
Source0: http://download.gnome.org/sources/gnome-session/3.6/%{name}-%{version}.tar.xz
@@ -14,6 +14,7 @@ Patch0: gnome-session-3.3.1-llvmpipe.patch
# Blacklist NV30: https://bugzilla.redhat.com/show_bug.cgi?id=745202
Patch1: gnome-session-3.3.92-nv30.patch
Patch2: 0001-main-Set-XDG_MENU_PREFIX.patch
+Patch3: reject-shutdown-clients.patch
License: GPLv2+
Group: User Interface/Desktops
@@ -84,6 +85,7 @@ Desktop file to add GNOME to display manager session menu.
%patch0 -p1 -b .llvmpipe
%patch1 -p1 -b .nv30
%patch2 -p1 -b .set-xdg-menu-prefix
+%patch3 -p1 -b .reject-shutdown-clients
echo "ACLOCAL_AMFLAGS = -I m4" >> Makefile.am
@@ -158,6 +160,10 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || :
%{_datadir}/glib-2.0/schemas/org.gnome.SessionManager.gschema.xml
%changelog
+* Tue Nov 13 2012 Daniel Drake <dsd at laptop.org> - 3.6.2-2
+- Add upstream patch to fix handling of client registration during shutdown
+- Fixes slow gnome-session shutdown for maliit users
+
* Tue Nov 13 2012 Kalev Lember <kalevlember at gmail.com> - 3.6.2-1
- Update to 3.6.2
- Rebase the XDG_MENU_PREFIX patch
diff --git a/reject-shutdown-clients.patch b/reject-shutdown-clients.patch
new file mode 100644
index 0000000..ff8df51
--- /dev/null
+++ b/reject-shutdown-clients.patch
@@ -0,0 +1,172 @@
+From f2bee2cb89056d597d5815a1c403466234093a7d Mon Sep 17 00:00:00 2001
+From: Daniel Drake <dsd at laptop.org>
+Date: Mon, 12 Nov 2012 15:29:13 -0600
+Subject: [PATCH] Reject new XSMP clients earlier in the shutdown path
+
+When we are ending the session, a new client connecting and trying to
+register causes things to get confused and long delays to happen.
+
+Move GsmXsmpServer to be managed by GsmManager, which can now tell the
+server at a much earlier time when we are shutting down. Now new clients
+are rejected much earlier and the confusion and delays are gone.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=688209
+---
+ gnome-session/gsm-manager.c | 11 +++++++++++
+ gnome-session/gsm-xsmp-server.c | 13 ++++++++++---
+ gnome-session/gsm-xsmp-server.h | 1 +
+ gnome-session/main.c | 6 ------
+ 4 files changed, 22 insertions(+), 9 deletions(-)
+
+Index: gnome-session-3.6.1/gnome-session/gsm-manager.c
+===================================================================
+--- gnome-session-3.6.1.orig/gnome-session/gsm-manager.c
++++ gnome-session-3.6.1/gnome-session/gsm-manager.c
+@@ -48,6 +48,7 @@
+ #include "gsm-presence.h"
+ #include "gsm-shell.h"
+
++#include "gsm-xsmp-server.h"
+ #include "gsm-xsmp-client.h"
+ #include "gsm-dbus-client.h"
+
+@@ -118,6 +119,7 @@ struct GsmManagerPrivate
+ GsmStore *inhibitors;
+ GsmStore *apps;
+ GsmPresence *presence;
++ GsmXsmpServer *xsmp_server;
+
+ char *session_name;
+ gboolean is_fallback_session : 1;
+@@ -1584,6 +1586,7 @@ start_phase (GsmManager *manager)
+ update_idle (manager);
+ break;
+ case GSM_MANAGER_PHASE_QUERY_END_SESSION:
++ gsm_xsmp_server_stop_accepting_new_clients (manager->priv->xsmp_server);
+ do_phase_query_end_session (manager);
+ break;
+ case GSM_MANAGER_PHASE_END_SESSION:
+@@ -1641,6 +1644,7 @@ gsm_manager_start (GsmManager *manager)
+
+ g_return_if_fail (GSM_IS_MANAGER (manager));
+
++ gsm_xsmp_server_start (manager->priv->xsmp_server);
+ gsm_manager_set_phase (manager, GSM_MANAGER_PHASE_INITIALIZATION);
+ debug_app_summary (manager);
+ start_phase (manager);
+@@ -2380,6 +2384,11 @@ gsm_manager_set_client_store (GsmManager
+ manager->priv->clients = store;
+
+ if (manager->priv->clients != NULL) {
++ if (manager->priv->xsmp_server)
++ g_object_unref (manager->priv->xsmp_server);
++
++ manager->priv->xsmp_server = gsm_xsmp_server_new (store);
++
+ g_signal_connect (manager->priv->clients,
+ "added",
+ G_CALLBACK (on_store_client_added),
+@@ -2504,6 +2513,8 @@ gsm_manager_dispose (GObject *object)
+
+ g_debug ("GsmManager: disposing manager");
+
++ g_clear_object (&manager->priv->xsmp_server);
++
+ if (manager->priv->clients != NULL) {
+ g_signal_handlers_disconnect_by_func (manager->priv->clients,
+ on_store_client_added,
+Index: gnome-session-3.6.1/gnome-session/gsm-xsmp-server.c
+===================================================================
+--- gnome-session-3.6.1.orig/gnome-session/gsm-xsmp-server.c
++++ gnome-session-3.6.1/gnome-session/gsm-xsmp-server.c
+@@ -71,7 +71,7 @@ struct GsmXsmpServerPrivate
+ IceListenObj *xsmp_sockets;
+ int num_xsmp_sockets;
+ int num_local_xsmp_sockets;
+-
++ gboolean stopping;
+ };
+
+ enum {
+@@ -248,6 +248,14 @@ gsm_xsmp_server_start (GsmXsmpServer *se
+ }
+ }
+
++void
++gsm_xsmp_server_stop_accepting_new_clients (GsmXsmpServer *server)
++{
++ g_return_if_fail (GSM_IS_XSMP_SERVER (server));
++ g_debug ("gsm_xsmp_server_stop");
++ server->priv->stopping = TRUE;
++}
++
+ static void
+ gsm_xsmp_server_set_client_store (GsmXsmpServer *xsmp_server,
+ GsmStore *store)
+@@ -319,8 +327,7 @@ accept_xsmp_connection (SmsConn s
+ GsmClient *client;
+ GsmIceConnectionWatch *data;
+
+- /* FIXME: what about during shutdown but before gsm_xsmp_shutdown? */
+- if (server->priv->xsmp_sockets == NULL) {
++ if (server->priv->stopping) {
+ g_debug ("GsmXsmpServer: In shutdown, rejecting new client");
+
+ *failure_reason_ret = strdup (_("Refusing new client connection because the session is currently being shut down\n"));
+Index: gnome-session-3.6.1/gnome-session/gsm-xsmp-server.h
+===================================================================
+--- gnome-session-3.6.1.orig/gnome-session/gsm-xsmp-server.h
++++ gnome-session-3.6.1/gnome-session/gsm-xsmp-server.h
+@@ -52,6 +52,7 @@ GType gsm_xsmp_server_get_
+
+ GsmXsmpServer * gsm_xsmp_server_new (GsmStore *client_store);
+ void gsm_xsmp_server_start (GsmXsmpServer *server);
++void gsm_xsmp_server_stop_accepting_new_clients (GsmXsmpServer *server);
+
+ G_END_DECLS
+
+Index: gnome-session-3.6.1/gnome-session/main.c
+===================================================================
+--- gnome-session-3.6.1.orig/gnome-session/main.c
++++ gnome-session-3.6.1/gnome-session/main.c
+@@ -44,7 +44,6 @@
+ #include "gsm-manager.h"
+ #include "gsm-session-fill.h"
+ #include "gsm-store.h"
+-#include "gsm-xsmp-server.h"
+ #include "gsm-fail-whale-dialog.h"
+
+ #define GSM_DBUS_NAME "org.gnome.SessionManager"
+@@ -282,7 +281,6 @@ main (int argc, char **argv)
+ char *display_str;
+ GsmManager *manager;
+ GsmStore *client_store;
+- GsmXsmpServer *xsmp_server;
+ GdmSignalHandler *signal_handler;
+ static char **override_autostart_dirs = NULL;
+ static char *session_name = NULL;
+@@ -349,8 +347,6 @@ main (int argc, char **argv)
+
+ client_store = gsm_store_new ();
+
+- xsmp_server = gsm_xsmp_server_new (client_store);
+-
+ if (!acquire_name ()) {
+ gsm_fail_whale_dialog_we_failed (TRUE, TRUE, NULL);
+ gtk_main ();
+@@ -377,15 +373,10 @@ main (int argc, char **argv)
+ gsm_util_init_error (TRUE, "Failed to load session \"%s\"", session_name ? session_name : "(null)");
+ }
+
+- gsm_xsmp_server_start (xsmp_server);
+ gsm_manager_start (manager);
+
+ gtk_main ();
+
+- if (xsmp_server != NULL) {
+- g_object_unref (xsmp_server);
+- }
+-
+ if (manager != NULL) {
+ g_debug ("Unreffing manager");
+ g_object_unref (manager);
More information about the scm-commits
mailing list