Fix crasher

Resolves: #1176413
This commit is contained in:
Ray Strode 2015-01-05 13:44:58 -05:00
parent 25d9fbd19e
commit 85e76e8866
2 changed files with 229 additions and 1 deletions

View File

@ -0,0 +1,222 @@
From 837a0bfcc44d104ff48285077f3a3e8e01ecc29a Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
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

View File

@ -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 <rstrode@redhat.com> 3.15.3-2
- Fix crasher
Resolves: #1176413
* Fri Dec 19 2014 Richard Hughes <rhughes@redhat.com> - 3.15.3-1
- Update to 3.15.3