FWIW, this seems to "fix" the issue.
dualbus@debian:~/src/gnu/bash$ git diff -- redir.c
diff --git a/redir.c b/redir.c
index 68741dbb..8113ae3b 100644
--- a/redir.c
+++ b/redir.c
@@ -906,6 +906,7 @@ do_redirection_internal (redirect, flags)
close (fd);
return (r); /* XXX */
}
+ add_undo_close_redirect (redirector);
}
else if ((fd != redirector) && (dup2 (fd, redirector) < 0))
{
@@ -1006,6 +1007,7 @@ do_redirection_internal (redirect, flags)
close (fd);
return (r); /* XXX */
}
+ add_undo_close_redirect (redirector);
}
else if (fd != redirector && dup2 (fd, redirector) < 0)
{
@@ -1077,6 +1079,7 @@ do_redirection_internal (redirect, flags)
close (redirector);
return (r); /* XXX */
}
+ add_undo_close_redirect (redirector);
}
/* This is correct. 2>&1 means dup2 (1, 2); */
else if (dup2 (redir_fd, redirector) < 0)