Applied, thank you
On Mon, Aug 30, 2021 at 9:32 PM Ron Yorston <r...@pobox.com> wrote: > > Stacy Harper reports that this script: > > test() { . /tmp/bb_test; } > echo "export TEST=foo" >/tmp/bb_test > test 2>/dev/null > echo "$TEST" > > correctly prints 'foo' in BusyBox 1.33 but hangs in 1.34. > > Bisection suggested the problem was caused by commit a1b0d3856 (ash: add > process substitution in bash-compatibility mode). Removing the call to > unwindredir() in cmdloop() introduced in that commit makes the script > work again. > > Additionally, these examples of process substitution: > > while true; do cat <(echo hi); done > f() { while true; do cat <(echo hi); done } > f > > result in running out of file descriptors. This is a regression from > v5 of the process substitution patch caused by changes to evalcommand() > not being transferred to v6. > > function old new delta > static.pushredir - 99 +99 > evalcommand 1729 1750 +21 > exitreset 69 86 +17 > cmdloop 372 365 -7 > unwindredir 28 - -28 > pushredir 112 - -112 > ------------------------------------------------------------------------------ > (add/remove: 1/2 grow/shrink: 2/1 up/down: 137/-147) Total: -10 bytes > > Signed-off-by: Ron Yorston <r...@pobox.com> > --- > shell/ash.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/shell/ash.c b/shell/ash.c > index b5947147a..53c140930 100644 > --- a/shell/ash.c > +++ b/shell/ash.c > @@ -10278,6 +10278,9 @@ evalcommand(union node *cmd, int flags) > > /* First expand the arguments. */ > TRACE(("evalcommand(0x%lx, %d) called\n", (long)cmd, flags)); > +#if BASH_PROCESS_SUBST > + redir_stop = redirlist; > +#endif > file_stop = g_parsefile; > back_exitstatus = 0; > > @@ -10356,7 +10359,11 @@ evalcommand(union node *cmd, int flags) > lastarg = nargv[-1]; > > expredir(cmd->ncmd.redirect); > +#if !BASH_PROCESS_SUBST > redir_stop = pushredir(cmd->ncmd.redirect); > +#else > + pushredir(cmd->ncmd.redirect); > +#endif > preverrout_fd = 2; > if (BASH_XTRACEFD && xflag) { > /* NB: bash closes fd == $BASH_XTRACEFD when it is changed. > @@ -13476,9 +13483,6 @@ cmdloop(int top) > #if JOBS > if (doing_jobctl) > showjobs(SHOW_CHANGED|SHOW_STDERR); > -#endif > -#if BASH_PROCESS_SUBST > - unwindredir(NULL); > #endif > inter = 0; > if (iflag && top) { > -- > 2.31.1 > > _______________________________________________ > busybox mailing list > busybox@busybox.net > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox