From 13c62bc181c6da9f287b737f7a3238e0269b40b3 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Tue, 2 Aug 2022 12:35:40 -0700 Subject: [PATCH] gmain: close pidfd when finalizing GChildWatchSource A file-descriptor was created with the introduction of pidfd_getfd() but nothing is closing it when the source finalizes. The GChildWatchSource is the creator and consumer of this FD and therefore responsible for closing it on finalization. The pidfd leak was introduced in !2408. This fixes issues with Builder where anon_inode:[pidfd] exhaust the available FD limit for the process. Fixes #2708 --- glib/gmain.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/glib/gmain.c b/glib/gmain.c index e9965f7f6..3ceec61ee 100644 --- a/glib/gmain.c +++ b/glib/gmain.c @@ -5646,7 +5646,11 @@ g_child_watch_finalize (GSource *source) GChildWatchSource *child_watch_source = (GChildWatchSource *) source; if (child_watch_source->using_pidfd) - return; + { + if (child_watch_source->poll.fd >= 0) + close (child_watch_source->poll.fd); + return; + } G_LOCK (unix_signal_lock); unix_child_watches = g_slist_remove (unix_child_watches, source);