summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <halfline@gmail.com>2020-11-02 19:07:51 +0000
committerRay Strode <halfline@gmail.com>2020-11-02 19:07:51 +0000
commit0b3d44e0e0769b76df24dee8a6dd81356e45d216 (patch)
tree935cfebf8ccc709dd2892ff98e46f54000defcd8
parentcec03906c75ea1cac9ffa01fd85ac49dad7dcd25 (diff)
parent5b4844aeeb2430a5e9b20ef4148cecd13b418357 (diff)
downloadgdm-0b3d44e0e0769b76df24dee8a6dd81356e45d216.tar.gz
Merge branch 'wip/fix-some-fd-leaks' into 'master'
Fix some file descriptor leaks See merge request GNOME/gdm!111
-rw-r--r--daemon/gdm-manager.c17
-rw-r--r--daemon/gdm-session.c1
-rw-r--r--daemon/gdm-xdmcp-display-factory.c2
3 files changed, 12 insertions, 8 deletions
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index e828544b..9c10adff 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -121,9 +121,9 @@ static void gdm_manager_class_init (GdmManagerClass *klass);
static void gdm_manager_init (GdmManager *manager);
static void gdm_manager_dispose (GObject *object);
-static GdmSession *create_user_session_for_display (GdmManager *manager,
- GdmDisplay *display,
- uid_t allowed_user);
+static void create_user_session_for_display (GdmManager *manager,
+ GdmDisplay *display,
+ uid_t allowed_user);
static void start_user_session (GdmManager *manager,
StartUserSessionOperation *operation);
static void clean_user_session (GdmSession *session);
@@ -1338,7 +1338,8 @@ set_up_automatic_login_session (GdmManager *manager,
/* 0 is root user; since the daemon talks to the session object
* directly, itself, for automatic login
*/
- session = create_user_session_for_display (manager, display, 0);
+ create_user_session_for_display (manager, display, 0);
+ session = get_user_session_for_display (display);
g_object_get (G_OBJECT (display),
"session-type", &display_session_type,
@@ -1544,6 +1545,8 @@ on_display_status_changed (GdmDisplay *display,
}
#endif
+ g_object_set_data (G_OBJECT (display), "gdm-user-session", NULL);
+
if (display == manager->priv->automatic_login_display) {
g_clear_weak_pointer (&manager->priv->automatic_login_display);
@@ -2289,7 +2292,7 @@ clean_user_session (GdmSession *session)
g_object_unref (session);
}
-static GdmSession *
+static void
create_user_session_for_display (GdmManager *manager,
GdmDisplay *display,
uid_t allowed_user)
@@ -2399,7 +2402,7 @@ create_user_session_for_display (GdmManager *manager,
g_object_set_data (G_OBJECT (session), "gdm-display", display);
g_object_set_data_full (G_OBJECT (display),
"gdm-user-session",
- g_object_ref (session),
+ session,
(GDestroyNotify)
clean_user_session);
@@ -2407,8 +2410,6 @@ create_user_session_for_display (GdmManager *manager,
greeter_is_wayland = g_strcmp0 (display_session_type, "wayland") == 0;
g_object_set (G_OBJECT (session), "ignore-wayland", !greeter_is_wayland, NULL);
#endif
-
- return session;
}
static void
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index ca7d98f1..b07ffa82 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -3590,6 +3590,7 @@ gdm_session_dispose (GObject *object)
g_clear_pointer (&self->user_verifier_extensions,
g_hash_table_unref);
g_clear_object (&self->greeter_interface);
+ g_clear_object (&self->remote_greeter_interface);
g_clear_object (&self->chooser_interface);
g_free (self->display_name);
diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c
index 220ee3af..ce8f026e 100644
--- a/daemon/gdm-xdmcp-display-factory.c
+++ b/daemon/gdm-xdmcp-display-factory.c
@@ -2118,6 +2118,8 @@ on_display_status_changed (GdmDisplay *display,
g_assert_not_reached ();
break;
}
+
+ g_clear_object (&launch_environment);
}
static GdmDisplay *