bug-bash
[Top][All Lists]
Advanced

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

Re: File descriptor leak in nested functions


From: Charles Duffy
Subject: Re: File descriptor leak in nested functions
Date: Thu, 15 Apr 2010 17:58:37 -0500

The provided reproducer was unnecessarily complicated. The following also
reproduces the issue:

function get_fd_count() {
        local fds
        cd /proc/$$/fd; fds=( * ) # avoid a StackOverflow source colorizer bug
        echo "${#fds[@]}"
}

function fd_leak_func() {
        while : ; do
                echo ">> Current FDs: $(get_fd_count)"
                read retval new_state < <(set +e; new_state=$(echo
foo); retval=$?; printf "%d %s\n" $retval $new_state)
        done
}

fd_leak_func


Running the contents of fd_leak_func at top level, by contrast, does not
reproduce the bug.

On Thu, Apr 15, 2010 at 4:57 PM, Charles Duffy <charles@dyfis.net> wrote:

> Configuration Information [Automatically generated, do not change]:
> Machine: x86_64
> OS: linux-gnu
> Compiler: gcc
> Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64'
> -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu'
> -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL
> -DHAVE_CONFIG_H   -I.  -I../bash -I../bash/include -I../bash/lib   -g -O2
> -Wall
> uname output: Linux cduffyxp 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12
> 04:38:19 UTC 2010 x86_64 GNU/Linux
> Machine Type: x86_64-pc-linux-gnu
>
> Bash Version: 4.0
> Patch Level: 33
> Release Status: release
>
> Description:
>         File descriptor leak in nested functions
>
> Repeat-By:
>         Run the following code:
>
>                 function get_fd_count() {
>                     local fds
>                     cd /proc/$$/fd; fds=( * ) # avoid a StackOverflow
> source colorizer bug
>                     echo "${#fds[@]}"
>                 }
>
>                 function fd_leak_func() {
>                     echo ">> Current FDs: $(get_fd_count)"
>                     read retval new_state < <(set +e; new_state=$(echo
> foo); retval=$?; printf "%d %s\n" $retval $new_state)
>                 }
>
>                 function parent_func() {
>                     while fd_leak_func; do :; done
>                 }
>
>                 parent_func
>
>         If the issue occurs, the "Current FDs" value constantly increases,
>         eventually leading to exhaustion.
>
>         Note that parent_func is essential; if the while loop is removed
> from
>         the function and run at top level, the issue will not occur.
>
>         This has also been observed against bash 3.2.25.
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]