[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