From 85e76e88665e6b5649f70923c54076e9e21aae92 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 5 Jan 2015 13:44:58 -0500 Subject: [PATCH] Fix crasher Resolves: #1176413 --- add-back-session-name-property.patch | 222 +++++++++++++++++++++++++++ gnome-session.spec | 8 +- 2 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 add-back-session-name-property.patch diff --git a/add-back-session-name-property.patch b/add-back-session-name-property.patch new file mode 100644 index 0000000..e1d1795 --- /dev/null +++ b/add-back-session-name-property.patch @@ -0,0 +1,222 @@ +From 837a0bfcc44d104ff48285077f3a3e8e01ecc29a Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 5 Jan 2015 13:41:47 -0500 +Subject: [PATCH] manager: add back session-name property + +It got stripped out in the gdbus port, but it's used internally. + +Fixes memory corruption crasher + +https://bugzilla.gnome.org/show_bug.cgi?id=622924 +--- + gnome-session/gsm-manager.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c +index 1e6841e..0edfef0 100644 +--- a/gnome-session/gsm-manager.c ++++ b/gnome-session/gsm-manager.c +@@ -144,60 +144,61 @@ struct GsmManagerPrivate + + /* List of clients which were disconnected due to disabled condition + * and shouldn't be automatically restarted */ + GSList *condition_clients; + + GSList *pending_end_session_tasks; + GCancellable *end_session_cancellable; + + GSettings *settings; + GSettings *session_settings; + GSettings *screensaver_settings; + GSettings *lockdown_settings; + + GsmSystem *system; + GDBusConnection *connection; + GsmExportedManager *skeleton; + gboolean dbus_disconnected : 1; + guint name_owner_id; + + GsmShell *shell; + guint shell_end_session_dialog_canceled_id; + guint shell_end_session_dialog_open_failed_id; + guint shell_end_session_dialog_confirmed_logout_id; + guint shell_end_session_dialog_confirmed_shutdown_id; + guint shell_end_session_dialog_confirmed_reboot_id; + }; + + enum { + PROP_0, + PROP_CLIENT_STORE, ++ PROP_SESSION_NAME, + PROP_FALLBACK, + PROP_FAILSAFE + }; + + enum { + PHASE_CHANGED, + LAST_SIGNAL + }; + + static guint signals [LAST_SIGNAL] = { 0 }; + + static void gsm_manager_class_init (GsmManagerClass *klass); + static void gsm_manager_init (GsmManager *manager); + + static gboolean auto_save_is_enabled (GsmManager *manager); + static void maybe_save_session (GsmManager *manager); + + static gboolean _log_out_is_locked_down (GsmManager *manager); + + static void _handle_client_end_session_response (GsmManager *manager, + GsmClient *client, + gboolean is_ok, + gboolean do_last, + gboolean cancel, + const char *reason); + static void show_shell_end_session_dialog (GsmManager *manager, + GsmShellEndSessionDialogType type); + static gpointer manager_object = NULL; + + G_DEFINE_TYPE (GsmManager, gsm_manager, G_TYPE_OBJECT) +@@ -2069,60 +2070,63 @@ gsm_manager_set_property (GObject *object, + switch (prop_id) { + case PROP_FAILSAFE: + gsm_manager_set_failsafe (self, g_value_get_boolean (value)); + break; + case PROP_FALLBACK: + self->priv->is_fallback_session = g_value_get_boolean (value); + break; + case PROP_CLIENT_STORE: + gsm_manager_set_client_store (self, g_value_get_object (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } + } + + static void + gsm_manager_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) + { + GsmManager *self; + + self = GSM_MANAGER (object); + + switch (prop_id) { + case PROP_FAILSAFE: + g_value_set_boolean (value, self->priv->failsafe); + break; ++ case PROP_SESSION_NAME: ++ g_value_set_string (value, self->priv->session_name); ++ break; + case PROP_FALLBACK: + g_value_set_boolean (value, self->priv->is_fallback_session); + break; + case PROP_CLIENT_STORE: + g_value_set_object (value, self->priv->clients); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } + } + + static gboolean + _find_app_provides (const char *id, + GsmApp *app, + const char *service) + { + return gsm_app_provides (app, service); + } + + static GObject * + gsm_manager_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) + { + GsmManager *manager; + + manager = GSM_MANAGER (G_OBJECT_CLASS (gsm_manager_parent_class)->constructor (type, + n_construct_properties, + construct_properties)); +@@ -2257,60 +2261,74 @@ gsm_manager_dispose (GObject *object) + + G_OBJECT_CLASS (gsm_manager_parent_class)->dispose (object); + } + + static void + gsm_manager_class_init (GsmManagerClass *klass) + { + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = gsm_manager_get_property; + object_class->set_property = gsm_manager_set_property; + object_class->constructor = gsm_manager_constructor; + object_class->dispose = gsm_manager_dispose; + + signals [PHASE_CHANGED] = + g_signal_new ("phase-changed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GsmManagerClass, phase_changed), + NULL, NULL, NULL, + G_TYPE_NONE, + 1, G_TYPE_STRING); + + g_object_class_install_property (object_class, + PROP_FAILSAFE, + g_param_spec_boolean ("failsafe", + NULL, + NULL, + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); ++ /** ++ * GsmManager::session-name ++ * ++ * Then name of the currently active session, typically "gnome" or "gnome-fallback". ++ * This may be the name of the configured default session, or the name of a fallback ++ * session in case we fell back. ++ */ ++ g_object_class_install_property (object_class, ++ PROP_SESSION_NAME, ++ g_param_spec_string ("session-name", ++ NULL, ++ NULL, ++ NULL, ++ G_PARAM_READABLE)); + + /** + * GsmManager::fallback + * + * If %TRUE, the current session is running in the "fallback" mode; + * this is distinct from whether or not it was configured as default. + */ + g_object_class_install_property (object_class, + PROP_FALLBACK, + g_param_spec_boolean ("fallback", + NULL, + NULL, + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property (object_class, + PROP_CLIENT_STORE, + g_param_spec_object ("client-store", + NULL, + NULL, + GSM_TYPE_STORE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_type_class_add_private (klass, sizeof (GsmManagerPrivate)); + } + + static void + on_presence_status_changed (GsmPresence *presence, + guint status, + GsmManager *manager) +-- +2.1.0 + diff --git a/gnome-session.spec b/gnome-session.spec index 0f42c70..59c8a64 100644 --- a/gnome-session.spec +++ b/gnome-session.spec @@ -11,7 +11,7 @@ Summary: GNOME session manager Name: gnome-session Version: 3.15.3 -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.15/%{name}-%{version}.tar.xz @@ -20,6 +20,7 @@ Source0: http://download.gnome.org/sources/gnome-session/3.15/%{name}-%{version} Patch1: gnome-session-3.3.92-nv30.patch Patch2: 0001-main-Set-XDG_MENU_PREFIX.patch Patch3: gnome-session-3.6.2-swrast.patch +Patch4: add-back-session-name-property.patch License: GPLv2+ Group: User Interface/Desktops @@ -91,6 +92,7 @@ Desktop file to add GNOME on wayland to display manager session menu. %patch1 -p1 -b .nv30 %patch2 -p1 -b .set-xdg-menu-prefix %patch3 -p1 -b .swrast +%patch4 -p1 -b .add-back-session-name-property echo "ACLOCAL_AMFLAGS = -I m4" >> Makefile.am @@ -146,6 +148,10 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || : %{_datadir}/glib-2.0/schemas/org.gnome.SessionManager.gschema.xml %changelog +* Mon Jan 05 2015 Ray Strode 3.15.3-2 +- Fix crasher + Resolves: #1176413 + * Fri Dec 19 2014 Richard Hughes - 3.15.3-1 - Update to 3.15.3