]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fdset: improve debug logging for left-over fds
authorLennart Poettering <lennart@poettering.net>
Wed, 11 Oct 2023 09:11:12 +0000 (11:11 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 11 Oct 2023 09:39:48 +0000 (11:39 +0200)
Let's show which fds are closed as part of the left-over fd set logic on
daemon reload/reexec cycles.

This is useful to debug accidentally unclaimed fds.

src/shared/fdset.c

index f5dcdce2182a7d5232f11801a255fa85be520a20..b62f15c6494fbdab8702124ebeaec028b9511b23 100644 (file)
@@ -54,6 +54,8 @@ void fdset_close(FDSet *s) {
         void *p;
 
         while ((p = set_steal_first(MAKE_SET(s)))) {
+                int fd = PTR_TO_FD(p);
+
                 /* Valgrind's fd might have ended up in this set here, due to fdset_new_fill(). We'll ignore
                  * all failures here, so that the EBADFD that valgrind will return us on close() doesn't
                  * influence us */
@@ -62,8 +64,14 @@ void fdset_close(FDSet *s) {
                  * which has no effect at all, since they are only duplicates. So don't be surprised about
                  * these log messages. */
 
-                log_debug("Closing set fd %i", PTR_TO_FD(p));
-                (void) close_nointr(PTR_TO_FD(p));
+                if (DEBUG_LOGGING) {
+                        _cleanup_free_ char *path = NULL;
+
+                        (void) fd_get_path(fd, &path);
+                        log_debug("Closing set fd %i (%s)", fd, strna(path));
+                }
+
+                (void) close_nointr(fd);
         }
 }