rpms/gdm/F-12 gdm-multistack.patch,1.6,1.7 gdm.spec,1.509,1.510

Ray Strode rstrode at fedoraproject.org
Wed Oct 28 15:15:42 UTC 2009


Author: rstrode

Update of /cvs/pkgs/rpms/gdm/F-12
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv10602

Modified Files:
	gdm-multistack.patch gdm.spec 
Log Message:
- Fix double free during user switching (might address
  bug 512944)


gdm-multistack.patch:
 gdm-greeter-login-window.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.6 -r 1.7 gdm-multistack.patchIndex: gdm-multistack.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdm/F-12/gdm-multistack.patch,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -r1.6 -r1.7
--- gdm-multistack.patch	27 Oct 2009 19:46:29 -0000	1.6
+++ gdm-multistack.patch	28 Oct 2009 15:15:41 -0000	1.7
@@ -1,17968 +1,31 @@
-From dfa6b8d5ed60552f435c34c47bc45089fa3eef48 Mon Sep 17 00:00:00 2001
+From b773a74dec86ebf40941aa7ac1892c1329704ba3 Mon Sep 17 00:00:00 2001
 From: Ray Strode <rstrode at redhat.com>
-Date: Fri, 20 Feb 2009 13:52:19 -0500
-Subject: [PATCH 07/53] Add a comment marking protected api in chooser
+Date: Wed, 28 Oct 2009 11:13:10 -0400
+Subject: [PATCH] Prevent start session signal handler from getting called multiple times
 
-The chooser widget has methods that only its
-subclasses are supposed to call.  We should
-mark them as such.
+It was causing a double free.
 ---
- gui/simple-greeter/gdm-chooser-widget.h |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/gui/simple-greeter/gdm-chooser-widget.h b/gui/simple-greeter/gdm-chooser-widget.h
-index 578e613..7e3e59c 100644
---- a/gui/simple-greeter/gdm-chooser-widget.h
-+++ b/gui/simple-greeter/gdm-chooser-widget.h
-@@ -136,6 +136,8 @@ int            gdm_chooser_widget_get_number_of_items          (GdmChooserWidget
- void           gdm_chooser_widget_activate_if_one_item         (GdmChooserWidget          *widget);
- void           gdm_chooser_widget_propagate_pending_key_events (GdmChooserWidget          *widget);
- 
-+/* Protected
-+ */
- void           gdm_chooser_widget_loaded                       (GdmChooserWidget          *widget);
- 
- G_END_DECLS
--- 
-1.6.5.1
-
-
-From 7b4e38d04e246d7dc4c446ed2a3c69fcc67257cb Mon Sep 17 00:00:00 2001
-From: Ray Strode <rstrode at redhat.com>
-Date: Fri, 6 Feb 2009 17:44:37 -0500
-Subject: [PATCH 08/53] Drop duplicated entry introspection output
-
----
- daemon/gdm-greeter-server.c |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
-
-diff --git a/daemon/gdm-greeter-server.c b/daemon/gdm-greeter-server.c
-index 2e01d33..cecce83 100644
---- a/daemon/gdm-greeter-server.c
-+++ b/daemon/gdm-greeter-server.c
-@@ -752,7 +752,6 @@ do_introspect (DBusConnection *connection,
-                                "      <arg name=\"layout_name\" type=\"s\"/>\n"
-                                "    </signal>\n"
-                                "    <signal name=\"DefaultSessionNameChanged\">\n"
--                               "    <signal name=\"DefaultSessionNameChanged\">\n"
-                                "      <arg name=\"session_name\" type=\"s\"/>\n"
-                                "    </signal>\n"
-                                "    <signal name=\"TimedLoginRequested\">\n"
--- 
-1.6.5.1
-
-
-From 8d5ddd913f13581df1662730745c1d906772185e Mon Sep 17 00:00:00 2001
-From: Ray Strode <rstrode at redhat.com>
-Date: Mon, 2 Mar 2009 10:07:03 -0500
-Subject: [PATCH 09/53] Make lookup_item not warn when passing NULL for args
-
-gtk_tree_model_get doesn't like NULL, and we allow
-NULL for optional return values.
-
-We now check each argument for NULL and call
-gtk_tree_model_get individually N times (one for
-each argument) instead of just once.
----
- gui/simple-greeter/gdm-chooser-widget.c |   31 ++++++++++++++++++++++++-------
- 1 files changed, 24 insertions(+), 7 deletions(-)
-
-diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c
-index 2875456..cbd5072 100644
---- a/gui/simple-greeter/gdm-chooser-widget.c
-+++ b/gui/simple-greeter/gdm-chooser-widget.c
-@@ -2171,13 +2171,30 @@ gdm_chooser_widget_lookup_item (GdmChooserWidget *widget,
-         }
-         g_free (active_item_id);
- 
--        gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
--                            CHOOSER_IMAGE_COLUMN, image,
--                            CHOOSER_NAME_COLUMN, name,
--                            CHOOSER_PRIORITY_COLUMN, priority,
--                            CHOOSER_ITEM_IS_IN_USE_COLUMN, is_in_use,
--                            CHOOSER_ITEM_IS_SEPARATED_COLUMN, is_separate,
--                            -1);
-+        if (image != NULL) {
-+                gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
-+                                    CHOOSER_IMAGE_COLUMN, image, -1);
-+        }
-+
-+        if (name != NULL) {
-+                gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
-+                                    CHOOSER_NAME_COLUMN, name, -1);
-+        }
-+
-+        if (priority != NULL) {
-+                gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
-+                                    CHOOSER_PRIORITY_COLUMN, priority, -1);
-+        }
-+
-+        if (is_in_use != NULL) {
-+                gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
-+                                    CHOOSER_ITEM_IS_IN_USE_COLUMN, is_in_use, -1);
-+        }
-+
-+        if (is_separate != NULL) {
-+                gtk_tree_model_get (GTK_TREE_MODEL (widget->priv->list_store), &iter,
-+                                    CHOOSER_ITEM_IS_SEPARATED_COLUMN, is_separate, -1);
-+        }
- 
-         return TRUE;
- }
--- 
-1.6.5.1
-
-
-From 57a0d19b8b1e5e7a2132b15ea2c536207b61f80f Mon Sep 17 00:00:00 2001
-From: Ray Strode <rstrode at redhat.com>
-Date: Fri, 6 Feb 2009 15:35:00 -0500
-Subject: [PATCH 10/53] Drop "stopped" signal from worker-job class
-
-It was unused, dead code.
----
- daemon/gdm-session-direct.c     |   14 --------------
- daemon/gdm-session-worker-job.c |   11 -----------
- daemon/gdm-session-worker-job.h |    1 -
- 3 files changed, 0 insertions(+), 26 deletions(-)
-
-diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
-index 47a5778..b6abae4 100644
---- a/daemon/gdm-session-direct.c
-+++ b/daemon/gdm-session-direct.c
-@@ -1539,13 +1539,6 @@ gdm_session_direct_init (GdmSessionDirect *session)
- }
- 
- static void
--worker_stopped (GdmSessionWorkerJob *job,
--                GdmSessionDirect    *session)
--{
--        g_debug ("GdmSessionDirect: Worker job stopped");
--}
--
--static void
- worker_started (GdmSessionWorkerJob *job,
-                 GdmSessionDirect    *session)
- {
-@@ -1588,10 +1581,6 @@ start_worker (GdmSessionDirect *session)
-         session->priv->job = gdm_session_worker_job_new ();
-         gdm_session_worker_job_set_server_address (session->priv->job, session->priv->server_address);
-         g_signal_connect (session->priv->job,
--                          "stopped",
--                          G_CALLBACK (worker_stopped),
--                          session);
--        g_signal_connect (session->priv->job,
-                           "started",
-                           G_CALLBACK (worker_started),
-                           session);
-@@ -1613,9 +1602,6 @@ static void
- stop_worker (GdmSessionDirect *session)
- {
-         g_signal_handlers_disconnect_by_func (session->priv->job,
--                                              G_CALLBACK (worker_stopped),
--                                              session);
--        g_signal_handlers_disconnect_by_func (session->priv->job,
-                                               G_CALLBACK (worker_started),
-                                               session);
-         g_signal_handlers_disconnect_by_func (session->priv->job,
-diff --git a/daemon/gdm-session-worker-job.c b/daemon/gdm-session-worker-job.c
-index 6723464..633d6e2 100644
---- a/daemon/gdm-session-worker-job.c
-+++ b/daemon/gdm-session-worker-job.c
-@@ -68,7 +68,6 @@ enum {
- 
- enum {
-         STARTED,
--        STOPPED,
-         EXITED,
-         DIED,
-         LAST_SIGNAL
-@@ -390,16 +389,6 @@ gdm_session_worker_job_class_init (GdmSessionWorkerJobClass *klass)
-                               g_cclosure_marshal_VOID__VOID,
-                               G_TYPE_NONE,
-                               0);
--        signals [STOPPED] =
--                g_signal_new ("stopped",
--                              G_OBJECT_CLASS_TYPE (object_class),
--                              G_SIGNAL_RUN_FIRST,
--                              G_STRUCT_OFFSET (GdmSessionWorkerJobClass, stopped),
[...17692 lines suppressed...]
-+                           "nonexistent conversation %s", service_name);
++        if (!login_window->priv->is_interactive) {
 +                return;
 +        }
 +
-+        stop_all_other_conversations (impl, conversation);
-+
-         command = get_session_command (impl);
-         program = g_strdup_printf (GDMCONFDIR "/Xsession \"%s\"", command);
-         g_free (command);
- 
--        conversation = find_conversation_by_name (impl, service_name);
--
-         setup_session_environment (impl);
-         send_environment (impl, conversation);
- 
-@@ -2285,23 +2327,7 @@ gdm_session_direct_start_session (GdmSession *session,
- static void
- stop_all_conversations (GdmSessionDirect *session)
- {
--        GHashTableIter iter;
--        gpointer key, value;
--
--        if (session->priv->conversations == NULL) {
--                return;
--        }
--
--        g_hash_table_iter_init (&iter, session->priv->conversations);
--        while (g_hash_table_iter_next (&iter, &key, &value)) {
--                GdmSessionConversation *conversation;
--
--                conversation = (GdmSessionConversation *) value;
--
--                stop_conversation (conversation);
--        }
--
--        g_hash_table_remove_all (session->priv->conversations);
-+        stop_all_other_conversations (session, NULL);
- }
- 
- static void
-diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
-index 337718b..63ea82c 100644
---- a/daemon/gdm-simple-slave.c
-+++ b/daemon/gdm-simple-slave.c
-@@ -575,7 +575,7 @@ on_session_conversation_stopped (GdmSession     *session,
-         gboolean res;
-         g_debug ("GdmSimpleSlave: conversation stopped");
- 
--        if (slave->priv->greeter_server != NULL) {
-+        if (slave->priv->greeter != NULL) {
-                 res = gdm_greeter_server_conversation_stopped (slave->priv->greeter_server,
-                                                                service_name);
-                 if (! res) {
--- 
-1.6.5.1
-
-
-From 7f0b059434796ce2f352c8c72a5fa695c643fa04 Mon Sep 17 00:00:00 2001
-From: Ray Strode <rstrode at redhat.com>
-Date: Tue, 21 Apr 2009 15:30:28 -0400
-Subject: [PATCH 50/53] When one PAM conv. wins, actually stop the others
-
-We weren't properly keeping the winning conversation
-around in the previous commit
----
- daemon/gdm-session-direct.c |   13 ++++++++++---
- 1 files changed, 10 insertions(+), 3 deletions(-)
-
-diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
-index 52a67c4..7cc5511 100644
---- a/daemon/gdm-session-direct.c
-+++ b/daemon/gdm-session-direct.c
-@@ -2282,13 +2282,20 @@ stop_all_other_conversations (GdmSessionDirect        *session,
-                 conversation = (GdmSessionConversation *) value;
- 
-                 if (conversation == conversation_to_keep) {
--                        continue;
-+                        g_hash_table_iter_steal (&iter);
-+                        g_free (key);
-+                } else {
-+                        stop_conversation (conversation);
-                 }
--
--                stop_conversation (conversation);
-         }
- 
-         g_hash_table_remove_all (session->priv->conversations);
+         gdm_greeter_login_window_start_session_when_ready (login_window, service_name);
+         g_free (service_name);
 +
-+        if (conversation_to_keep != NULL) {
-+                g_hash_table_insert (session->priv->conversations,
-+                                     g_strdup (conversation_to_keep->service_name),
-+                                     conversation_to_keep);
++        if (login_window->priv->start_session_handler_id > 0) {
++                g_signal_handler_disconnect (login_window, login_window->priv->start_session_handler_id);
++                login_window->priv->start_session_handler_id = 0;
 +        }
  }
  
@@ -17970,98 +33,3 @@ index 52a67c4..7cc5511 100644
 -- 
 1.6.5.1
 
-
-From 189d1903462ccf6afbbddd9ccfdb79f0a8c2f099 Mon Sep 17 00:00:00 2001
-From: Ray Strode <rstrode at redhat.com>
-Date: Fri, 24 Jul 2009 14:41:48 -0400
-Subject: [PATCH 51/53] KILL pam stack instead of TERM pam stack
-
-Some PAM modules are really slow to shut down.
-We need to handle them being slow to shut down better,
-(by not blocking login on them shutting down etc), but
-in the mean time force them to die immediately.
-
-This is a temporary hack.
----
- daemon/gdm-session-worker-job.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/daemon/gdm-session-worker-job.c b/daemon/gdm-session-worker-job.c
-index 0327d77..d99b8a5 100644
---- a/daemon/gdm-session-worker-job.c
-+++ b/daemon/gdm-session-worker-job.c
-@@ -320,7 +320,7 @@ gdm_session_worker_job_stop (GdmSessionWorkerJob *session_worker_job)
- 
-         g_debug ("GdmSessionWorkerJob: Stopping job pid:%d", session_worker_job->priv->pid);
- 
--        res = gdm_signal_pid (session_worker_job->priv->pid, SIGTERM);
-+        res = gdm_signal_pid (session_worker_job->priv->pid, SIGKILL);
- 
-         if (res < 0) {
-                 g_warning ("Unable to kill session worker process");
--- 
-1.6.5.1
-
-
-From 77fcb562d35226b77787899dc20432838e19c8ba Mon Sep 17 00:00:00 2001
-From: Ray Strode <rstrode at redhat.com>
-Date: Wed, 21 Oct 2009 16:08:52 -0400
-Subject: [PATCH 52/53] Don't show tasklist for autologin
-
----
- gui/simple-greeter/gdm-greeter-login-window.c |    5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
-
-diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c
-index fc12f36..8af5452 100644
---- a/gui/simple-greeter/gdm-greeter-login-window.c
-+++ b/gui/simple-greeter/gdm-greeter-login-window.c
-@@ -1189,6 +1189,11 @@ begin_auto_login (GdmGreeterLoginWindow *login_window)
-         set_message (login_window, _("Select language and click Log In"));
- 
-         switch_mode (login_window, MODE_AUTHENTICATION);
-+
-+        show_widget (login_window, "conversation-list", FALSE);
-+        gdm_task_list_foreach_task (GDM_TASK_LIST (login_window->priv->conversation_list),
-+                                    (GdmTaskListForeachFunc) reset_task,
-+                                    login_window);
- }
- 
- static gboolean
--- 
-1.6.5.1
-
-
-From 5926910dba8dfe78bef05ff4a21ae46b5cb69ffb Mon Sep 17 00:00:00 2001
-From: Ray Strode <rstrode at redhat.com>
-Date: Fri, 23 Oct 2009 17:39:19 -0400
-Subject: [PATCH 53/53] Drop the other hiding stuff for now.
-
-It depends on buttons being available that we don't have
-in the multi-stack branch.
----
- gui/simple-greeter/gdm-user-chooser-widget.c |    8 +-------
- 1 files changed, 1 insertions(+), 7 deletions(-)
-
-diff --git a/gui/simple-greeter/gdm-user-chooser-widget.c b/gui/simple-greeter/gdm-user-chooser-widget.c
-index bff71e5..4d3c445 100644
---- a/gui/simple-greeter/gdm-user-chooser-widget.c
-+++ b/gui/simple-greeter/gdm-user-chooser-widget.c
-@@ -140,13 +140,7 @@ update_other_user_visibility (GdmUserChooserWidget *widget)
-                 return;
-         }
- 
--        number_of_users = gdm_chooser_widget_get_number_of_items (GDM_CHOOSER_WIDGET (widget));
--
--        /* we hide the Other user if it's the last one, and we show it
--         * if there's another user */
--        if (number_of_users == 1 && widget->priv->has_user_other) {
--                remove_user_other (widget);
--        } if (number_of_users >= 1 && !widget->priv->has_user_other) {
-+        if (!widget->priv->has_user_other) {
-                 add_user_other (widget);
-         }
- }
--- 
-1.6.5.1
-


Index: gdm.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gdm/F-12/gdm.spec,v
retrieving revision 1.509
retrieving revision 1.510
diff -u -p -r1.509 -r1.510
--- gdm.spec	27 Oct 2009 19:46:29 -0000	1.509
+++ gdm.spec	28 Oct 2009 15:15:41 -0000	1.510
@@ -16,7 +16,7 @@
 Summary: The GNOME Display Manager
 Name: gdm
 Version: 2.28.1
-Release: 12%{?dist}
+Release: 13%{?dist}
 Epoch: 1
 License: GPLv2+
 Group: User Interface/X
@@ -413,6 +413,10 @@ fi
 %{_libdir}/gdm/simple-greeter/plugins/fingerprint.so
 
 %changelog
+* Wed Oct 28 2009 Ray Strode <rstrode at redhat.com> 2.28.1-13
+- Fix double free during user switching (might address
+  bug 512944)
+
 * Tue Oct 27 2009 Ray Strode <rstrode at redhat.com> 2.28.1-12
 - One more go at bug 527920
 




More information about the fedora-extras-commits mailing list