diff mbox series

[v3,3/6] util/async-teardown: Fall back to close fds one by one

Message ID 20230617053621.50359-4-bmeng@tinylab.org (mailing list archive)
State New, archived
Headers show
Series net/tap: Fix QEMU frozen issue when the maximum number of file descriptors is very large | expand

Commit Message

Bin Meng June 17, 2023, 5:36 a.m. UTC
When opening /proc/self/fd fails, current codes just return directly,
but we can fall back to close fds one by one.

Signed-off-by: Bin Meng <bmeng@tinylab.org>

---

(no changes since v2)

Changes in v2:
- new patch: "util/async-teardown: Fall back to close fds one by one"

 util/async-teardown.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Claudio Imbrenda June 19, 2023, 9:18 a.m. UTC | #1
On Sat, 17 Jun 2023 13:36:18 +0800
Bin Meng <bmeng@tinylab.org> wrote:

> When opening /proc/self/fd fails, current codes just return directly,
> but we can fall back to close fds one by one.
> 
> Signed-off-by: Bin Meng <bmeng@tinylab.org>
> 
> ---
> 
> (no changes since v2)
> 
> Changes in v2:
> - new patch: "util/async-teardown: Fall back to close fds one by one"
> 
>  util/async-teardown.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/util/async-teardown.c b/util/async-teardown.c
> index 3ab19c8740..7e0177a8da 100644
> --- a/util/async-teardown.c
> +++ b/util/async-teardown.c
> @@ -48,7 +48,11 @@ static void close_all_open_fd(void)
>  
>      dir = opendir("/proc/self/fd");
>      if (!dir) {
> -        /* If /proc is not mounted, there is nothing that can be done. */
> +        /* 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. */

a few patches later, you replace the whole close_all_open_fd() with a
generic version, I don't see a point in changing the code here.

this patch is useless, just drop it
Bin Meng June 25, 2023, 3:17 p.m. UTC | #2
On 2023/6/19 17:18:23, "Claudio Imbrenda" <imbrenda@linux.ibm.com> wrote:

>On Sat, 17 Jun 2023 13:36:18 +0800
>Bin Meng <bmeng@tinylab.org> wrote:
>
>>  When opening /proc/self/fd fails, current codes just return directly,
>>  but we can fall back to close fds one by one.
>>
>>  Signed-off-by: Bin Meng <bmeng@tinylab.org>
>>
>>  ---
>>
>>  (no changes since v2)
>>
>>  Changes in v2:
>>  - new patch: "util/async-teardown: Fall back to close fds one by one"
>>
>>   util/async-teardown.c | 6 +++++-
>>   1 file changed, 5 insertions(+), 1 deletion(-)
>>
>>  diff --git a/util/async-teardown.c b/util/async-teardown.c
>>  index 3ab19c8740..7e0177a8da 100644
>>  --- a/util/async-teardown.c
>>  +++ b/util/async-teardown.c
>>  @@ -48,7 +48,11 @@ static void close_all_open_fd(void)
>>
>>       dir = opendir("/proc/self/fd");
>>       if (!dir) {
>>  -        /* If /proc is not mounted, there is nothing that can be done. */
>>  +        /* 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. */
>
>a few patches later, you replace the whole close_all_open_fd() with a
>generic version, I don't see a point in changing the code here.

I meant to do a 100% replacement, and this patch added the missing loop.

>
>
>this patch is useless, just drop it

Regards,
Bin
diff mbox series

Patch

diff --git a/util/async-teardown.c b/util/async-teardown.c
index 3ab19c8740..7e0177a8da 100644
--- a/util/async-teardown.c
+++ b/util/async-teardown.c
@@ -48,7 +48,11 @@  static void close_all_open_fd(void)
 
     dir = opendir("/proc/self/fd");
     if (!dir) {
-        /* If /proc is not mounted, there is nothing that can be done. */
+        /* 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. */