[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.
>
>