diff --git a/src/cmd/ksh93/bltins/alarm.c b/src/cmd/ksh93/bltins/alarm.c index 5d152cc16..6f0833698 100644 --- a/src/cmd/ksh93/bltins/alarm.c +++ b/src/cmd/ksh93/bltins/alarm.c @@ -134,7 +134,7 @@ static void trap_timeout(void* handle) tp->timeout = 0; tp->flags |= L_FLAG; tp->sh->sigflag[SIGALRM] |= SH_SIGALRM; - if(sh_isstate(SH_TTYWAIT)) + if(sh_isstate(SH_TTYWAIT) && !tp->sh->bltinfun) sh_timetraps(tp->sh); } diff --git a/src/cmd/ksh93/sh/xec.c b/src/cmd/ksh93/sh/xec.c index f34fb5e1b..85844f5be 100644 --- a/src/cmd/ksh93/sh/xec.c +++ b/src/cmd/ksh93/sh/xec.c @@ -2643,6 +2643,11 @@ int sh_exec(register const Shnode_t *t, int flags) break; } } + if(shp->trapnote&SH_SIGALRM) + { + shp->trapnote &= ~SH_SIGALRM; + sh_timetraps(shp); + } if(shp->trapnote || (shp->exitval && sh_isstate(SH_ERREXIT)) && t && echeck) sh_chktrap(shp);