summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Vroon <chainsaw@gentoo.org>2008-11-13 17:25:55 +0000
committerTony Vroon <chainsaw@gentoo.org>2008-11-13 17:25:55 +0000
commite22a7ad35a3cc902e3ef9e8f9941e0ac281bd2b6 (patch)
treefa30bb757e28eedc76db807096baf99444241788 /gnome-base/gnome-session
parentgeneral cleanup (diff)
downloadgentoo-2-e22a7ad35a3cc902e3ef9e8f9941e0ac281bd2b6.tar.gz
gentoo-2-e22a7ad35a3cc902e3ef9e8f9941e0ac281bd2b6.tar.bz2
gentoo-2-e22a7ad35a3cc902e3ef9e8f9941e0ac281bd2b6.zip
Debian patch identified by Marcin Kurek <morgoth6@gmail.com> resolves intermittent gnome-session-manager failures on login (only SMP systems appear to be affected). First step towards closing bug #239293.
(Portage version: 2.2_rc14/cvs/Linux 2.6.28-rc4-00305-g4ffaf86-dirty x86_64)
Diffstat (limited to 'gnome-base/gnome-session')
-rw-r--r--gnome-base/gnome-session/ChangeLog11
-rw-r--r--gnome-base/gnome-session/files/gnome-session-2.22.3-gsd-spawn.patch252
-rw-r--r--gnome-base/gnome-session/gnome-session-2.22.3-r1.ebuild74
3 files changed, 336 insertions, 1 deletions
diff --git a/gnome-base/gnome-session/ChangeLog b/gnome-base/gnome-session/ChangeLog
index bb3380830899..3d10f2ccd7b1 100644
--- a/gnome-base/gnome-session/ChangeLog
+++ b/gnome-base/gnome-session/ChangeLog
@@ -1,6 +1,15 @@
# ChangeLog for gnome-base/gnome-session
# Copyright 2002-2008 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-session/ChangeLog,v 1.222 2008/09/25 15:22:59 jer Exp $
+# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-session/ChangeLog,v 1.223 2008/11/13 17:25:54 chainsaw Exp $
+
+*gnome-session-2.22.3-r1 (13 Nov 2008)
+
+ 13 Nov 2008; <chainsaw@gentoo.org>
+ +files/gnome-session-2.22.3-gsd-spawn.patch,
+ +gnome-session-2.22.3-r1.ebuild:
+ Debian patch identified by Marcin Kurek <morgoth6@gmail.com> resolves
+ intermittent gnome-session-manager failures on login (only SMP systems
+ appear to be affected). First step towards closing bug #239293.
25 Sep 2008; Jeroen Roovers <jer@gentoo.org> gnome-session-2.22.3.ebuild:
Stable for HPPA (bug #236971).
diff --git a/gnome-base/gnome-session/files/gnome-session-2.22.3-gsd-spawn.patch b/gnome-base/gnome-session/files/gnome-session-2.22.3-gsd-spawn.patch
new file mode 100644
index 000000000000..20b5ec00a512
--- /dev/null
+++ b/gnome-base/gnome-session/files/gnome-session-2.22.3-gsd-spawn.patch
@@ -0,0 +1,252 @@
+
+Debian #339785
+GNOME #500216
+Spawn gnome-settings-daemon with g_spawn instead of DBus.
+
+The underlying problem fixed by this change is that gnome-settings-daemon
+handles the configured multimedia keys shortcuts which can launch any app;
+these apps will inherit gnome-settings-daemon's env, which might miss things
+such as GnuPG or SSH agent information. Spawning instead of using dbus
+activation gnome-settings-daemon makes it possible to inherit the env vars.
+The better long term solution might be in the gnome-session dbus rewrite, which
+might mean apps are started by gnome-session, but this hasn't been confirmed.
+
+Index: gnome-session-2.22.1/configure.in
+===================================================================
+--- gnome-session-2.22.1.orig/configure.in 2008-04-07 23:45:59.000000000 +0100
++++ gnome-session-2.22.1/configure.in 2008-05-07 00:29:18.000000000 +0100
+@@ -393,6 +393,20 @@
+ ])
+ AC_SUBST(RSH_COMMAND)
+
++AC_MSG_CHECKING([for gnome-settings-daemon])
++AC_ARG_WITH(settings-daemon,
++ AC_HELP_STRING([--with-settings-daemon=PATH],
++ [Specify the path to gnome-settings-daemon]),
++ [SETTINGS_DAEMON_PATH="$with_settings_daemon"],
++ [SETTINGS_DAEMON_PATH=`pkg-config --variable=binary gnome-settings-daemon`
++ if test x$SETTINGS_DAEMON_PATH = x ; then
++ AC_MSG_ERROR([No path found to gnome-settings-daemon.])
++ fi
++])
++AC_MSG_RESULT($SETTINGS_DAEMON_PATH)
++AC_DEFINE_UNQUOTED(SETTINGS_DAEMON_PATH, "$SETTINGS_DAEMON_PATH",
++ [Defines the path to the gnome-settings-daemon binary])
++
+
+ GNOME_SESSION_TARBALL=`date +%e`
+ AC_DEFINE_UNQUOTED(GNOME_SESSION_TARBALL_DAY, $GNOME_SESSION_TARBALL,
+Index: gnome-session-2.22.1/gnome-session/gsm-gsd.c
+===================================================================
+--- gnome-session-2.22.1.orig/gnome-session/gsm-gsd.c 2008-04-07 23:45:55.000000000 +0100
++++ gnome-session-2.22.1/gnome-session/gsm-gsd.c 2008-05-07 00:29:18.000000000 +0100
+@@ -11,11 +11,13 @@
+ #include <dbus/dbus-glib-lowlevel.h>
+
+ #include <gtk/gtkmessagedialog.h>
++#include <gtk/gtkmain.h>
+
+ #include <gnome-settings-daemon/gnome-settings-client.h>
+
+ typedef struct {
+- DBusGProxy *dbus_proxy;
++ DBusGProxy *dbus_proxy;
++ GPid pid;
+ gboolean activating;
+ time_t start_time;
+ guint attempts;
+@@ -80,6 +82,8 @@
+ gtk_widget_show (dialog);
+ }
+
++static void gsd_spawn (gboolean wait_activated);
++
+ static void
+ name_owner_changed (DBusGProxy *proxy,
+ const char *name,
+@@ -102,7 +106,7 @@
+
+ gsd->dbus_proxy = NULL;
+
+- gsm_gsd_start ();
++ gsd_spawn (FALSE);
+ }
+ }
+ else
+@@ -128,15 +132,29 @@
+ G_CALLBACK(plugin_activated), gsd);
+ }
+
+-void
+-gsm_gsd_start (void)
++static void
++gsd_died_cb (GPid pid, gint status, GnomeSettingsData *gsd)
++{
++ gsd->pid = 0;
++ /* gsd terminated before registering to dbus */
++ if (gsd->activating)
++ {
++ gsd->activating = FALSE;
++ gsd_spawn (FALSE);
++ }
++}
++
++static void
++gsd_spawn (gboolean wait_activated)
+ {
+ static GnomeSettingsData gsd = { NULL };
+ time_t now;
+ DBusGConnection *connection;
++ DBusGProxy *dbus_service;
+ GError *error = NULL;
++ const gchar *const argv[] = { SETTINGS_DAEMON_PATH, "gnome-settings-daemon", NULL };
+
+- gsm_verbose ("gsm_gsd_start(): starting\n");
++ gsm_verbose ("gsd_spawn(): starting\n");
+
+ if (gsd.activating)
+ return;
+@@ -171,67 +189,89 @@
+ gsd_set_error (&gsd, error->message);
+ gsd_error_dialog (&gsd, NULL);
+ g_error_free (error);
++ return;
++ }
++
++ dbus_connection_set_exit_on_disconnect (dbus_g_connection_get_connection (connection),
++ FALSE);
++
++ gsd.dbus_proxy = dbus_g_proxy_new_for_name (connection,
++ "org.gnome.SettingsDaemon",
++ "/org/gnome/SettingsDaemon",
++ "org.gnome.SettingsDaemon");
++
++ if (gsd.dbus_proxy == NULL)
++ {
++ gsd_set_error (&gsd, "Could not obtain DBUS proxy");
++ gsd_error_dialog (&gsd, NULL);
++ return;
++ }
++
++ if (g_spawn_async (NULL, (gchar **) argv, NULL,
++ G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_FILE_AND_ARGV_ZERO,
++ NULL, NULL, &gsd.pid, &error))
++ {
++ g_child_watch_add (gsd.pid, (GChildWatchFunc) gsd_died_cb, &gsd);
+ }
+ else
+ {
+- dbus_connection_set_exit_on_disconnect (dbus_g_connection_get_connection (connection),
+- FALSE);
++ gsd_set_error (&gsd, error->message);
++ gsd_error_dialog (&gsd, NULL);
++ g_error_free (error);
++ return;
++ }
+
+- gsd.dbus_proxy = dbus_g_proxy_new_for_name (connection,
+- "org.gnome.SettingsDaemon",
+- "/org/gnome/SettingsDaemon",
+- "org.gnome.SettingsDaemon");
++ dbus_service = dbus_g_proxy_new_for_name (connection,
++ DBUS_SERVICE_DBUS,
++ DBUS_PATH_DBUS,
++ DBUS_INTERFACE_DBUS);
++ dbus_g_proxy_add_signal (dbus_service,
++ "NameOwnerChanged",
++ G_TYPE_STRING,
++ G_TYPE_STRING,
++ G_TYPE_STRING,
++ G_TYPE_INVALID);
++ dbus_g_proxy_connect_signal (dbus_service,
++ "NameOwnerChanged",
++ G_CALLBACK (name_owner_changed),
++ &gsd,
++ NULL);
+
+- if (gsd.dbus_proxy == NULL)
+- {
+- gsd_set_error (&gsd, "Could not obtain DBUS proxy");
+- gsd_error_dialog (&gsd, NULL);
+- }
+- else
++ if (wait_activated)
++ {
++ while (gsd.activating)
+ {
+- /* Connect to the signal before we wake the settings daemon
+- * up, otherwise, it might have the sound system ready before
+- * we're actually listening */
+- dbus_g_proxy_add_signal (gsd.dbus_proxy,
+- "PluginActivated",
+- G_TYPE_STRING,
+- G_TYPE_INVALID);
+-
+- dbus_g_proxy_connect_signal (gsd.dbus_proxy,
+- "PluginActivated",
+- G_CALLBACK (plugin_activated),
+- &gsd,
+- NULL);
++ gtk_main_iteration ();
++ }
+
+- if (!org_gnome_SettingsDaemon_awake(gsd.dbus_proxy, &error))
+- {
+- /* Method failed, the GError is set, let's warn everyone */
+- gsd_set_error (&gsd, error->message);
+- gsd_error_dialog (&gsd, NULL);
+- g_error_free (error);
+- }
+- else
+- {
+- DBusGProxy *dbusService;
+- dbusService = dbus_g_proxy_new_for_name (connection,
+- DBUS_SERVICE_DBUS,
+- DBUS_PATH_DBUS,
+- DBUS_INTERFACE_DBUS);
+-
+- dbus_g_proxy_add_signal (dbusService,
+- "NameOwnerChanged",
+- G_TYPE_STRING,
+- G_TYPE_STRING,
+- G_TYPE_STRING,
+- G_TYPE_INVALID);
+-
+- dbus_g_proxy_connect_signal (dbusService,
+- "NameOwnerChanged",
+- G_CALLBACK (name_owner_changed),
+- &gsd,
+- NULL);
++ /* Connect to the signal before we wake the settings daemon
++ * up, otherwise, it might have the sound system ready before
++ * we're actually listening */
++ dbus_g_proxy_add_signal (gsd.dbus_proxy,
++ "PluginActivated",
++ G_TYPE_STRING,
++ G_TYPE_INVALID);
++
++ dbus_g_proxy_connect_signal (gsd.dbus_proxy,
++ "PluginActivated",
++ G_CALLBACK (plugin_activated),
++ &gsd,
++ NULL);
+
+- }
++ /* if gsd.pid is 0, something broke havoc and the user has already been warned */
++ if (gsd.pid && !org_gnome_SettingsDaemon_awake(gsd.dbus_proxy, &error))
++ {
++ /* Method failed, the GError is set, let's warn everyone */
++ gsd_set_error (&gsd, error->message);
++ gsd_error_dialog (&gsd, NULL);
++ g_error_free (error);
+ }
+ }
+ }
++
++void
++gsm_gsd_start (void)
++{
++ gsd_spawn (TRUE);
++}
++
+
diff --git a/gnome-base/gnome-session/gnome-session-2.22.3-r1.ebuild b/gnome-base/gnome-session/gnome-session-2.22.3-r1.ebuild
new file mode 100644
index 000000000000..b257f4375aeb
--- /dev/null
+++ b/gnome-base/gnome-session/gnome-session-2.22.3-r1.ebuild
@@ -0,0 +1,74 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-session/gnome-session-2.22.3-r1.ebuild,v 1.1 2008/11/13 17:25:54 chainsaw Exp $
+
+inherit eutils gnome2 autotools
+
+DESCRIPTION="Gnome session manager"
+HOMEPAGE="http://www.gnome.org/"
+SRC_URI="${SRC_URI}
+ branding? ( mirror://gentoo/gentoo-splash.png )"
+
+LICENSE="GPL-2 LGPL-2 FDL-1.1"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
+IUSE="branding ipv6 tcpd"
+
+RDEPEND=">=dev-libs/glib-2.13
+ >=gnome-base/libgnomeui-2.2
+ >=x11-libs/gtk+-2.11.1
+ >=dev-libs/dbus-glib-0.71
+ >=gnome-base/gnome-keyring-2.21.92
+ gnome-base/gnome-settings-daemon
+ >=x11-libs/libnotify-0.2.1
+ x11-libs/libXau
+ x11-apps/xdpyinfo
+ gnome-base/gnome-settings-daemon
+ >=gnome-base/gconf-2
+ tcpd? ( >=sys-apps/tcp-wrappers-7.6 )"
+DEPEND="${RDEPEND}
+ x11-apps/xrdb
+ >=sys-devel/gettext-0.10.40
+ >=dev-util/pkgconfig-0.17
+ >=dev-util/intltool-0.35
+ !gnome-base/gnome-core
+ !<gnome-base/gdm-2.20.4"
+
+# gnome-base/gnome-core overwrite /usr/bin/gnome-session
+# gnome-base/gdm does not provide gnome.desktop anymore
+
+DOCS="AUTHORS ChangeLog HACKING NEWS README"
+
+pkg_setup() {
+ # TODO: convert libnotify to a configure option
+ G2CONF="${G2CONF} $(use_enable ipv6) $(use_enable tcpd tcp-wrappers) --with-settings-daemon=/usr/libexec/gnome-settings-daemon"
+}
+
+src_unpack() {
+ gnome2_src_unpack
+
+ # Patch for Gentoo Branding (bug #42687)
+ use branding && epatch "${FILESDIR}/${PN}-2.17.90.1-gentoo-branding.patch"
+
+ # Get rid of random asserts in tons of programs due to development versions
+ epatch "${FILESDIR}/${PN}-2.19.2-no-asserts.patch"
+
+ # Spawn GSD instead of relying on D-Bus, as this falls down quite
+ # spectacularly on SMP systems (bug #239293)
+ epatch "${FILESDIR}/${P}-gsd-spawn.patch"
+ eautoreconf
+}
+
+src_install() {
+ gnome2_src_install
+
+ dodir /etc/X11/Sessions
+ exeinto /etc/X11/Sessions
+ doexe "${FILESDIR}/Gnome"
+
+ # Our own splash for world domination
+ if use branding ; then
+ insinto /usr/share/pixmaps/splash/
+ doins "${DISTDIR}/gentoo-splash.png"
+ fi
+}