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

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