please see patch(and info) in 
https://gist.github.com/howaboutsynergy/3e7237a53dbd102f821650b97b9bde57#gistcomment-2961148
(patch also attached)

Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -pipe -march=native -Wno-trigraphs -fno-schedule-insns2 
-fno-delete-null-pointer-checks -mtune=native -fomit-frame-pointer -O2 
-D_FORTIFY_SOURCE=2 
-DDEFAULT_PATH_VALUE='/usr/local/sbin:/usr/local/bin:/usr/bin' 
-DSTANDARD_UTILS_PATH='/usr/bin' -DSYS_BASHRC='/etc/bash.bashrc' 
-DSYS_BASH_LOGOUT='/etc/bash.bash_logout' -DNON_INTERACTIVE_LOGIN_SHELLS 
-fstack-protector-strong -fno-omit-frame-pointer -ftrack-macro-expansion=2 
-ggdb -fvar-tracking-assignments -O0 -Wno-parentheses -Wno-format-security
uname output: Linux i87k 5.2.0-rc7-g6fbc7275c7a9 #15 SMP Wed Jul 3 00:43:14 
CEST 2019 x86_64 GNU/Linux
Machine Type: x86_64-pc-linux-gnu

Bash Version: 5.0
Patch Level: 7
Release Status: maint


all other details got lost when I answered 'n' to:
Send bug report to bug-bash@gnu.org? [y/n] 

(and I don't feel like typing all that again)
but all you need to know is already in that gist comment anyway

thanks.
diff --git a/jobs.c b/jobs.c
index d81bc238..7756406f 100644
--- a/jobs.c
+++ b/jobs.c
@@ -2499,10 +2499,22 @@ wait_for_background_pids (ps)
     }
 
 #if defined (PROCESS_SUBSTITUTION)
-  if (last_procsub_child && last_procsub_child->pid != NO_PID && last_procsub_child->pid == last_asynchronous_pid)
+  if (last_procsub_child && last_procsub_child->pid != NO_PID)
     r = wait_for (last_procsub_child->pid);
   wait_procsubs ();
   reap_procsubs ();
+#if 0
+  /* We don't want to wait indefinitely if we have stopped children. */
+  if (any_stopped == 0)
+    {
+      /* Check whether or not we have any unreaped children. */
+      while ((r = wait_for (ANY_PID)) >= 0)
+	{
+	  QUIT;
+	  CHECK_WAIT_INTR;
+	}
+    }
+#endif
 #endif
       
   /* POSIX.2 says the shell can discard the statuses of all completed jobs if
@@ -3695,10 +3707,8 @@ itrace("waitchld: waitpid returns %d block = %d children_exited = %d", pid, bloc
       /* Only manipulate the list of process substitutions while SIGCHLD
 	 is blocked. */
       if ((ind = find_procsub_child (pid)) >= 0)
-	{
-	  set_procsub_status (ind, pid, WSTATUS (status));
-	  bgp_add (pid, WSTATUS (status));
-	}
+	set_procsub_status (ind, pid, WSTATUS (status));
+	/* XXX - save in bgpids list? */
 #endif
 
       /* It is not an error to have a child terminate that we did

Attachment: publickey - howaboutsynergy@protonmail.com - 0x947B9B34.asc
Description: application/pgp-keys

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to