On Fri, Dec 11, 2015 at 2:40 AM, Yoriyuki Yamagata <
yoriyuki.yamag...@aist.go.jp> wrote:

> Dear list,
>
> I found that bash tries to close the same fd twice, consecutively.  I’m
> using Mac OS X Yosemite, and bash is the newest available (bash-master from
> http://tiswww.case.edu/php/chet/bash/bashtop.html yesterday).
>
> To reproduce the phenomenon, just run this shell script.
>
> — begin ---
> #!/Users/XXXX/bin/bash
>
> set -- `cat "testfile" | sed '/^\#/d’`
> — end ---
> Name it testscript
>
> testfile is the empty file.
>
> Then, run druss
>
> $ sudo dtruss -fa sudo -u XXXX ./testscript
>
> The part of output:
>
> 96765/0x20858e:    173615  173171 173168 fork()          = 96766 0
> 96766/0x208590:        74:        0:       0 fork()              = 0 0
> 96766/0x208590:        75       5      0 thread_selfid(0x0, 0x0, 0x0)
>       = 2131344 0
> 96766/0x208590:        77       3      0
> bsdthread_register(0x7FFF95D0E3E0, 0x7FFF95D0E3D0, 0x2000)              =
> -1 Err#22
> 96765/0x20858e:    173714       4      0 sigprocmask(0x3, 0x7FFF59BFD7A0,
> 0x0)           = 0x0 0
> 96765/0x20858e:    173717       3      1 close(0x4)              = 0 0
> 96765/0x20858e:    173739       1      0 close(0x4)              = -1 Err#9
>
> I do not know it is an important problem, but closing the same file
> descriptor twice could be fishy.
>
> Or maybe I missed something?
>
> Best,
>  —
> Yoriyuki Yamagata
> National Institute of Advanced Science and Technology (AIST), Senior
> Researcher
>


​The same happens on Fedora Linux 22.
Linux it-johnmckown-linux 4.2.6-201.fc22.x86_64 #1 SMP Tue Nov 24 18:42:39
UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

bash --version
GNU bash, version 4.3.42(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html
>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"

<trace output>
...
pipe([3, 4])                            = 0
rt_sigprocmask(SIG_BLOCK, [INT CHLD], [CHLD], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0x7f31c859a9d0) = 17257
rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0
close(4)                                = 0
close(4)                                = -1 EBADF (Bad file descriptor)
rt_sigprocmask(SIG_BLOCK, [INT CHLD], [CHLD], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0x7f31c859a9d0) = 17258
rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0
close(3)                                = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [CHLD], 8) = 0
rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [CHLD], 8) = 0
rt_sigaction(SIGINT, {0x556792b10290, [], SA_RESTORER, 0x7f31c7c26a50},
{0x556792b2acb0, [], SA_RESTORER, 0x7f31c7c26a50}, 8) = 0
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 17257
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 17258
rt_sigaction(SIGINT, {0x556792b2acb0, [], SA_RESTORER, 0x7f31c7c26a50},
{0x556792b10290, [], SA_RESTORER, 0x7f31c7c26a50}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0
close(3)                                = -1 EBADF (Bad file descriptor)
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=17257,
si_uid=1009, si_status=0, si_utime=0, si_stime=0} ---
wait4(-1, 0x7ffd3e7b4790, WNOHANG, NULL) = -1 ECHILD (No child processes)
rt_sigreturn({mask=[]})                 = 0
exit_group(0)                           = ?
+++ exited with 0 +++

</trace>​


-- 

Schrodinger's backup: The condition of any backup is unknown until a
restore is attempted.

Yoda of Borg, we are. Futile, resistance is, yes. Assimilated, you will be.

He's about as useful as a wax frying pan.

10 to the 12th power microphones = 1 Megaphone

Maranatha! <><
John McKown

Reply via email to