[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 5/6] util/async-teardown: Use qemu_close_range() to close fds
From: |
Bin Meng |
Subject: |
[PATCH v4 5/6] util/async-teardown: Use qemu_close_range() to close fds |
Date: |
Wed, 28 Jun 2023 23:27:25 +0800 |
From: Zhangjin Wu <falcon@tinylab.org>
Based on the old close_all_open_fd() of util/async-teardown.c, a new
generic qemu_close_range() has been added in osdep.c.
Now, let's switch over to use the generic qemu_close_range().
Signed-off-by: Zhangjin Wu <falcon@tinylab.org>
Signed-off-by: Bin Meng <bmeng@tinylab.org>
---
Changes in v4:
- call sysconf directly instead of using a variable
Changes in v3:
- limit the last_fd of qemu_close_range() to sysconf(_SC_OPEN_MAX)
Changes in v2:
- new patch: "util/async-teardown: Use qemu_close_range() to close fds"
util/async-teardown.c | 41 +----------------------------------------
1 file changed, 1 insertion(+), 40 deletions(-)
diff --git a/util/async-teardown.c b/util/async-teardown.c
index 7e0177a8da..a038a255ff 100644
--- a/util/async-teardown.c
+++ b/util/async-teardown.c
@@ -29,44 +29,6 @@
static pid_t the_ppid;
-/*
- * Close all open file descriptors.
- */
-static void close_all_open_fd(void)
-{
- struct dirent *de;
- int fd, dfd;
- DIR *dir;
-
-#ifdef CONFIG_CLOSE_RANGE
- int r = close_range(0, ~0U, 0);
- if (!r) {
- /* Success, no need to try other ways. */
- return;
- }
-#endif
-
- dir = opendir("/proc/self/fd");
- if (!dir) {
- /* If /proc is not mounted, close fds one by one. */
- int open_max = sysconf(_SC_OPEN_MAX), i;
- for (i = 0; i < open_max; i++) {
- close(i);
- }
- return;
- }
- /* Avoid closing the directory. */
- dfd = dirfd(dir);
-
- for (de = readdir(dir); de; de = readdir(dir)) {
- fd = atoi(de->d_name);
- if (fd != dfd) {
- close(fd);
- }
- }
- closedir(dir);
-}
-
static void hup_handler(int signal)
{
/* Check every second if this process has been reparented. */
@@ -92,9 +54,8 @@ static int async_teardown_fn(void *arg)
/*
* Close all file descriptors that might have been inherited from the
* main qemu process when doing clone, needed to make libvirt happy.
- * Not using close_range for increased compatibility with older kernels.
*/
- close_all_open_fd();
+ qemu_close_range(0, sysconf(_SC_OPEN_MAX) - 1);
/* Set up a handler for SIGHUP and unblock SIGHUP. */
sigaction(SIGHUP, &sa, NULL);
--
2.34.1
- [PATCH v4 0/6] net/tap: Fix QEMU frozen issue when the maximum number of file descriptors is very large, Bin Meng, 2023/06/28
- [PATCH v4 1/6] tests/tcg/cris: Fix the coding style, Bin Meng, 2023/06/28
- [PATCH v4 2/6] tests/tcg/cris: Correct the off-by-one error, Bin Meng, 2023/06/28
- [PATCH v4 4/6] util/osdep: Introduce qemu_close_range(), Bin Meng, 2023/06/28
- [PATCH v4 6/6] net: tap: Use qemu_close_range() to close fds, Bin Meng, 2023/06/28
- [PATCH v4 3/6] util/async-teardown: Fall back to close fds one by one, Bin Meng, 2023/06/28
- [PATCH v4 5/6] util/async-teardown: Use qemu_close_range() to close fds,
Bin Meng <=
- Re: [PATCH v4 0/6] net/tap: Fix QEMU frozen issue when the maximum number of file descriptors is very large, Michael Tokarev, 2023/06/29