fix deadlock in trap, backported from devel branch
Signed-off-by: Roman Rakus <rrakus@redhat.com>
This commit is contained in:
parent
f6ffed783f
commit
185aa1593d
60
bash-4.2-trap.patch
Normal file
60
bash-4.2-trap.patch
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
commit 41d203e21f94c1b8bfc457606ee633c22da3cf04
|
||||||
|
Author: Chet Ramey <chet.ramey@case.edu>
|
||||||
|
Date: Wed Jun 12 09:29:51 2013 -0400
|
||||||
|
|
||||||
|
commit bash-20130523 snapshot
|
||||||
|
|
||||||
|
diff --git a/trap.c b/trap.c
|
||||||
|
index 1e11d1f..da59b26 100644
|
||||||
|
--- a/trap.c
|
||||||
|
+++ b/trap.c
|
||||||
|
@@ -286,6 +286,9 @@ run_pending_traps ()
|
||||||
|
if (catch_flag == 0) /* simple optimization */
|
||||||
|
return;
|
||||||
|
|
||||||
|
+ if (running_trap > 0)
|
||||||
|
+ return; /* no recursive trap invocations */
|
||||||
|
+
|
||||||
|
catch_flag = trapped_signal_received = 0;
|
||||||
|
|
||||||
|
/* Preserve $? when running trap. */
|
||||||
|
@@ -304,6 +307,8 @@ run_pending_traps ()
|
||||||
|
|
||||||
|
BLOCK_SIGNAL (sig, set, oset);
|
||||||
|
|
||||||
|
+ running_trap = sig + 1;
|
||||||
|
+
|
||||||
|
if (sig == SIGINT)
|
||||||
|
{
|
||||||
|
run_interrupt_trap ();
|
||||||
|
@@ -324,6 +329,7 @@ run_pending_traps ()
|
||||||
|
{
|
||||||
|
/* This can happen when run_pending_traps is called while
|
||||||
|
running a SIGCHLD trap handler. */
|
||||||
|
+ running_trap = 0;
|
||||||
|
UNBLOCK_SIGNAL (oset);
|
||||||
|
continue; /* XXX */
|
||||||
|
}
|
||||||
|
@@ -359,7 +365,14 @@ run_pending_traps ()
|
||||||
|
save_subst_varlist = subst_assign_varlist;
|
||||||
|
subst_assign_varlist = 0;
|
||||||
|
|
||||||
|
+#if defined (JOB_CONTROL)
|
||||||
|
+ save_pipeline (1); /* XXX only provides one save level */
|
||||||
|
+#endif
|
||||||
|
evalstring (savestring (trap_list[sig]), "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE);
|
||||||
|
+#if defined (JOB_CONTROL)
|
||||||
|
+ restore_pipeline (1);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
restore_token_state (token_state);
|
||||||
|
free (token_state);
|
||||||
|
|
||||||
|
@@ -367,6 +380,7 @@ run_pending_traps ()
|
||||||
|
}
|
||||||
|
|
||||||
|
pending_traps[sig] = 0;
|
||||||
|
+ running_trap = 0;
|
||||||
|
|
||||||
|
UNBLOCK_SIGNAL (oset);
|
||||||
|
}
|
@ -6,7 +6,7 @@
|
|||||||
Version: %{baseversion}%{patchleveltag}
|
Version: %{baseversion}%{patchleveltag}
|
||||||
Name: bash
|
Name: bash
|
||||||
Summary: The GNU Bourne Again shell
|
Summary: The GNU Bourne Again shell
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
Group: System Environment/Shells
|
Group: System Environment/Shells
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
Url: http://www.gnu.org/software/bash
|
Url: http://www.gnu.org/software/bash
|
||||||
@ -115,6 +115,9 @@ Patch125: bash-4.2-size_type.patch
|
|||||||
# 903833, Fix missing close(), fixes fd leaks
|
# 903833, Fix missing close(), fixes fd leaks
|
||||||
Patch126: bash-4.2-missing_closes.patch
|
Patch126: bash-4.2-missing_closes.patch
|
||||||
|
|
||||||
|
# fix deadlock in trap, backported from devel branch
|
||||||
|
Patch127: bash-4.2-trap.patch
|
||||||
|
|
||||||
BuildRequires: texinfo bison
|
BuildRequires: texinfo bison
|
||||||
BuildRequires: ncurses-devel
|
BuildRequires: ncurses-devel
|
||||||
BuildRequires: autoconf, gettext
|
BuildRequires: autoconf, gettext
|
||||||
@ -408,6 +411,10 @@ end
|
|||||||
#%doc doc/*.ps doc/*.0 doc/*.html doc/article.txt
|
#%doc doc/*.ps doc/*.0 doc/*.html doc/article.txt
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jun 27 2013 Roman Rakus <rrakus@redhat.com> - 4.2.45-2
|
||||||
|
- Fixed a bug that caused trap handlers to be executed recursively,
|
||||||
|
corrupting internal data structures.
|
||||||
|
|
||||||
* Mon Mar 11 2013 Roman Rakus <rrakus@redhat.com> - 4.2.45-1
|
* Mon Mar 11 2013 Roman Rakus <rrakus@redhat.com> - 4.2.45-1
|
||||||
- Patchlevel 45
|
- Patchlevel 45
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user