hush: remove one sigprocmask from exit path
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 12 May 2011 08:59:18 +0000 (10:59 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 12 May 2011 08:59:18 +0000 (10:59 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/hush.c

index 89a13fe..bb95d63 100644 (file)
@@ -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)