[git commit] hush: remove one sigprocmask from exit path

Denys Vlasenko vda.linux at googlemail.com
Thu May 12 08:59:18 UTC 2011


commit: http://git.busybox.net/busybox/commit/?id=ebc1ee2e2a243a0ff3de6d2b70406ba75b771fa0
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/hush.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/shell/hush.c b/shell/hush.c
index 89a13fe..bb95d63 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -1456,13 +1456,15 @@ static void record_pending_signo(int sig)
 static void sigexit(int sig) NORETURN;
 static void sigexit(int sig)
 {
-	/* Disable all signals: job control, SIGPIPE, etc. */
-	sigprocmask_allsigs(SIG_BLOCK);
-
 	/* Careful: we can end up here after [v]fork. Do not restore
 	 * tty pgrp then, only top-level shell process does that */
-	if (G_saved_tty_pgrp && getpid() == G.root_pid)
+	if (G_saved_tty_pgrp && getpid() == G.root_pid) {
+		/* Disable all signals: job control, SIGPIPE, etc.
+		 * Mostly paranoid measure, to prevent infinite SIGTTOU.
+		 */
+		sigprocmask_allsigs(SIG_BLOCK);
 		tcsetpgrp(G_interactive_fd, G_saved_tty_pgrp);
+	}
 
 	/* Not a signal, just exit */
 	if (sig <= 0)
-- 
1.7.3.4



More information about the busybox-cvs mailing list