Blame SOURCES/0003-xdmcp-display-factory-Clear-launch-environment-when-.patch

400dab
From 7c9e236f9015aae2ea5868b67ff8036766cb7099 Mon Sep 17 00:00:00 2001
400dab
From: Ray Strode <rstrode@redhat.com>
400dab
Date: Tue, 15 Sep 2020 11:28:48 -0400
400dab
Subject: [PATCH 3/3] xdmcp-display-factory: Clear launch environment when done
400dab
 with it
400dab
400dab
The XDMCP disply factory examines the sessions of its displays'
400dab
launch environments when the displays change status.
400dab
400dab
Unfortunately it leaks a reference to the launch environment when
400dab
doing that.
400dab
400dab
This commit fixes the reference leak which leads to an fd leak.
400dab
---
400dab
 daemon/gdm-xdmcp-display-factory.c | 2 ++
400dab
 1 file changed, 2 insertions(+)
400dab
400dab
diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c
400dab
index 2e14beab4..98232113f 100644
400dab
--- a/daemon/gdm-xdmcp-display-factory.c
400dab
+++ b/daemon/gdm-xdmcp-display-factory.c
400dab
@@ -2091,60 +2091,62 @@ on_display_status_changed (GdmDisplay             *display,
400dab
                 gdm_display_factory_queue_purge_displays (GDM_DISPLAY_FACTORY (factory));
400dab
                 break;
400dab
         case GDM_DISPLAY_FAILED:
400dab
                 gdm_display_factory_queue_purge_displays (GDM_DISPLAY_FACTORY (factory));
400dab
                 break;
400dab
         case GDM_DISPLAY_UNMANAGED:
400dab
                 if (session != NULL) {
400dab
                         g_signal_handlers_disconnect_by_func (G_OBJECT (session),
400dab
                                                               G_CALLBACK (on_client_disconnected),
400dab
                                                               display);
400dab
                 }
400dab
                 break;
400dab
         case GDM_DISPLAY_PREPARED:
400dab
                 break;
400dab
         case GDM_DISPLAY_MANAGED:
400dab
                 if (session != NULL) {
400dab
                         g_signal_connect_object (G_OBJECT (session),
400dab
                                                  "client-disconnected",
400dab
                                                  G_CALLBACK (on_client_disconnected),
400dab
                                                  display, G_CONNECT_SWAPPED);
400dab
                         g_signal_connect_object (G_OBJECT (session),
400dab
                                                  "disconnected",
400dab
                                                  G_CALLBACK (on_client_disconnected),
400dab
                                                  display, G_CONNECT_SWAPPED);
400dab
                 }
400dab
                 break;
400dab
         default:
400dab
                 g_assert_not_reached ();
400dab
                 break;
400dab
         }
400dab
+
400dab
+        g_clear_object (&launch_environment);
400dab
 }
400dab
 
400dab
 static GdmDisplay *
400dab
 gdm_xdmcp_display_create (GdmXdmcpDisplayFactory *factory,
400dab
                           const char             *hostname,
400dab
                           GdmAddress             *address,
400dab
                           int                     displaynum)
400dab
 {
400dab
         GdmDisplay      *display;
400dab
         GdmDisplayStore *store;
400dab
         gboolean         use_chooser;
400dab
 
400dab
         g_debug ("GdmXdmcpDisplayFactory: Creating xdmcp display for %s:%d",
400dab
                 hostname ? hostname : "(null)", displaynum);
400dab
 
400dab
         use_chooser = FALSE;
400dab
         if (factory->priv->honor_indirect) {
400dab
                 IndirectClient *ic;
400dab
 
400dab
                 ic = indirect_client_lookup (factory, address);
400dab
 
400dab
                 /* This was an indirect thingie and nothing was yet chosen,
400dab
                  * use a chooser */
400dab
                 if (ic != NULL && ic->chosen_address == NULL) {
400dab
                         use_chooser = TRUE;
400dab
                 }
400dab
         }
400dab
 
400dab
         if (use_chooser) {
400dab
                 display = gdm_xdmcp_chooser_display_new (hostname,
400dab
-- 
400dab
2.26.2
400dab