diff -Naur xfce4-session-4.6.1//xfce4-session/xfsm-compat-gnome.c xfce4-session-4.6.1.tpg/xfce4-session/xfsm-compat-gnome.c --- xfce4-session-4.6.1//xfce4-session/xfsm-compat-gnome.c 2008-10-22 13:49:49.000000000 +0000 +++ xfce4-session-4.6.1.tpg/xfce4-session/xfsm-compat-gnome.c 2010-06-03 18:12:16.000000000 +0000 @@ -100,35 +100,25 @@ static void gnome_keyring_daemon_startup (void) { - const char *old_keyring; - GError *error = NULL; gchar *sout; gchar **lines; + gsize lineno; gint status; long pid; gchar *pid_str; gchar *end; - char *argv[2]; - - /* If there is already a working keyring, don't start a new daemon */ - old_keyring = g_getenv ("GNOME_KEYRING_SOCKET"); - if (old_keyring != NULL && access (old_keyring, R_OK | W_OK) == 0) - { -#ifdef HAVE_GNOME_KEYRING - gnome_keyring_daemon_prepare_environment_sync (); -#endif - return; - } - + char *argv[3]; /* Pipe to slave keyring lifetime to */ pipe (keyring_lifetime_pipe); error = NULL; argv[0] = GNOME_KEYRING_DAEMON; - argv[1] = NULL; - g_spawn_sync (NULL, argv, NULL, G_SPAWN_LEAVE_DESCRIPTORS_OPEN, + argv[1] = "--start"; + argv[2] = NULL; + g_spawn_sync (NULL, argv, NULL, + G_SPAWN_SEARCH_PATH | G_SPAWN_LEAVE_DESCRIPTORS_OPEN, child_setup, NULL, &sout, NULL, &status, &error); @@ -146,20 +136,22 @@ { if (WIFEXITED (status) && WEXITSTATUS (status) == 0 && sout != NULL) { - lines = g_strsplit (sout, "\n", 3); + lines = g_strsplit (sout, "\n", 0); - if (lines[0] != NULL && lines[1] != NULL - && g_str_has_prefix (lines[1], "GNOME_KEYRING_PID=")) - { - pid_str = lines[1] + strlen ("GNOME_KEYRING_PID="); - pid = strtol (pid_str, &end, 10); - - if (end != pid_str) - { - gnome_keyring_daemon_pid = pid; - xfce_putenv (lines[0]); - } - } + for (lineno = 0; lines[lineno] != NULL; lineno++) + { + xfce_putenv (lines[lineno]); + + if (g_str_has_prefix (lines[lineno], "GNOME_KEYRING_PID=")) + { + pid_str = lines[lineno] + strlen ("GNOME_KEYRING_PID="); + pid = strtol (pid_str, &end, 10); + if (end != pid_str) + { + gnome_keyring_daemon_pid = pid; + } + } + } g_strfreev (lines);