From 31df5a3eee74862312bbf89449d223aeae13aaf7 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 13 Dec 2020 16:36:28 +0100 Subject: ash: reset SIGHUP earlier: allows HUP traps in .profile, closes 13371 function old new delta ash_main 1188 1203 +15 Signed-off-by: Denys Vlasenko --- shell/ash.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'shell/ash.c') diff --git a/shell/ash.c b/shell/ash.c index 40695dee0..b271dd031 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -14340,6 +14340,17 @@ procargs(char **argv) shellparam.nparam++; xargv++; } + + /* Interactive bash re-enables SIGHUP which is SIG_IGNed on entry. + * Try: + * trap '' hup; bash; echo RET # type "kill -hup $$", see SIGHUP having effect + * trap '' hup; bash -c 'kill -hup $$; echo ALIVE' # here SIGHUP is SIG_IGNed + * NB: must do it before setting up signals (in optschanged()) + * and reading .profile etc (after we return from here): + */ + if (iflag) + signal(SIGHUP, SIG_DFL); + optschanged(); return login_sh; @@ -14510,14 +14521,6 @@ int ash_main(int argc UNUSED_PARAM, char **argv) } #endif state4: /* XXX ??? - why isn't this before the "if" statement */ - - /* Interactive bash re-enables SIGHUP which is SIG_IGNed on entry. - * Try: - * trap '' hup; bash; echo RET # type "kill -hup $$", see SIGHUP having effect - * trap '' hup; bash -c 'kill -hup $$; echo ALIVE' # here SIGHUP is SIG_IGNed - */ - signal(SIGHUP, SIG_DFL); - cmdloop(1); } #if PROFILE -- cgit v1.2.3