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

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