[glib/wip/chergert/fix-2708] gmain: close pidfd when finalizing GChildWatchSource




commit b62745fe8e1699473f87caff328ac2c6ce394c55
Author: Christian Hergert <chergert redhat com>
Date:   Tue Aug 2 12:35:40 2022 -0700

    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 a6f9b168e0..dba5f40e4e 100644
--- a/glib/gmain.c
+++ b/glib/gmain.c
@@ -5804,7 +5804,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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]