88 lines
2.8 KiB
Diff
88 lines
2.8 KiB
Diff
From aeb88313c2110389ec530c8c7d5d816bac24d254 Mon Sep 17 00:00:00 2001
|
|
From: Ray Strode <rstrode@redhat.com>
|
|
Date: Tue, 15 Sep 2020 00:41:00 -0400
|
|
Subject: [PATCH 2/3] session: Don't leak remote greeter interface
|
|
|
|
XDMCP login screens get a "Remote Geeter Interface" exported over
|
|
the bus connection (so the login window can provide a Disconnect
|
|
button).
|
|
|
|
This interface is getting leaked when the session object is disposed,
|
|
leaving the bus connection itself undisposed, which causes an fd
|
|
leak.
|
|
|
|
This commit plugs the interface leak, and thus the fd leak.
|
|
---
|
|
daemon/gdm-session.c | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
|
index 540a2534d..d6d8f128a 100644
|
|
--- a/daemon/gdm-session.c
|
|
+++ b/daemon/gdm-session.c
|
|
@@ -3602,60 +3602,61 @@ gdm_session_get_property (GObject *object,
|
|
break;
|
|
#ifdef ENABLE_WAYLAND_SUPPORT
|
|
case PROP_IGNORE_WAYLAND:
|
|
g_value_set_boolean (value, self->priv->ignore_wayland);
|
|
break;
|
|
#endif
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void
|
|
gdm_session_dispose (GObject *object)
|
|
{
|
|
GdmSession *self;
|
|
|
|
self = GDM_SESSION (object);
|
|
|
|
g_debug ("GdmSession: Disposing session");
|
|
|
|
gdm_session_close (self);
|
|
|
|
g_clear_pointer (&self->priv->conversations,
|
|
g_hash_table_unref);
|
|
|
|
g_clear_object (&self->priv->user_verifier_interface);
|
|
g_clear_pointer (&self->priv->user_verifier_extensions,
|
|
g_hash_table_unref);
|
|
g_clear_object (&self->priv->greeter_interface);
|
|
+ g_clear_object (&self->priv->remote_greeter_interface);
|
|
g_clear_object (&self->priv->chooser_interface);
|
|
|
|
g_free (self->priv->display_name);
|
|
self->priv->display_name = NULL;
|
|
|
|
g_free (self->priv->display_hostname);
|
|
self->priv->display_hostname = NULL;
|
|
|
|
g_free (self->priv->display_device);
|
|
self->priv->display_device = NULL;
|
|
|
|
g_free (self->priv->display_seat_id);
|
|
self->priv->display_seat_id = NULL;
|
|
|
|
g_free (self->priv->display_x11_authority_file);
|
|
self->priv->display_x11_authority_file = NULL;
|
|
|
|
g_strfreev (self->priv->conversation_environment);
|
|
self->priv->conversation_environment = NULL;
|
|
|
|
if (self->priv->worker_server != NULL) {
|
|
g_dbus_server_stop (self->priv->worker_server);
|
|
g_clear_object (&self->priv->worker_server);
|
|
}
|
|
|
|
if (self->priv->outside_server != NULL) {
|
|
g_dbus_server_stop (self->priv->outside_server);
|
|
g_clear_object (&self->priv->outside_server);
|
|
}
|
|
|
|
--
|
|
2.26.2
|
|
|