File bash-4.3-wait-sigint-handler.patch of Package bash.18439

Repeating self-calling of traps due the combination of a non-interactive
shell, a trap handler for SIGINT, an external process in the trap handler,
and a SIGINT within the trap after the external process runs.

---
 jobs.c |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

--- jobs.c
+++ jobs.c	2018-04-02 18:24:21.000000000 +0000
@@ -2432,7 +2432,17 @@ wait_for (pid)
   wait_sigint_received = child_caught_sigint = 0;
   if (job_control == 0 || (subshell_environment&SUBSHELL_COMSUB))
     {
-      old_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler);
+      SigHandler *temp_sigint_handler;
+
+      temp_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler);
+      if (temp_sigint_handler == wait_sigint_handler)
+        {
+#if defined (DEBUG)
+	  internal_warning ("wait_for: recursively setting old_sigint_handler to wait_sigint_handler: running_trap = %d", running_trap);
+#endif
+        }
+      else
+	old_sigint_handler = temp_sigint_handler;
       waiting_for_child = 0;
       if (old_sigint_handler == SIG_IGN)
 	set_signal_handler (SIGINT, old_sigint_handler);
openSUSE Build Service is sponsored by