Fix: sessiond: occasional badfd error on repeated SIGTERM
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 5 Mar 2020 21:52:32 +0000 (16:52 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 20 Mar 2020 21:19:53 +0000 (17:19 -0400)
The session daemon occasionally prints the following messages
when it received multiple SIGTERM signals:

PERROR - 16:50:18.505585257 [49845/49845]: write poll pipe: Bad file
descriptor (in notify_thread_pipe() at utils.c:35)

This is caused by a (somewhat inevitable) race between the teardown of
the daemon and the closing of its quit pipe. This happens more often
when kernel modules take a long time to be unloaded and the user
spams ctrl+c in the hope of convincing the daemon process to close
faster since modules are unloaded after closing the quit pipe.

Setting closed pipe fds to '-1' is safe anyway and is already
handled by the notify_thread_pipe() util.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: If08a455c65055dcb56ffbad3703173e6a45cfba5

src/common/utils.c

index d9bacad0e7a7f32dd660e2d6db28b754b7545066..646ebbbc7d34e6705d82fa654773ccbc387c5c66 100644 (file)
@@ -537,6 +537,7 @@ void utils_close_pipe(int *src)
                if (ret) {
                        PERROR("close pipe");
                }
                if (ret) {
                        PERROR("close pipe");
                }
+               src[i] = -1;
        }
 }
 
        }
 }
 
This page took 0.035009 seconds and 4 git commands to generate.