Lines Matching refs:sig
39 #define abortsig(sig) (sig==SIGABRT || sig==SIGBUS || sig==SIGILL || sig==SIGSEGV) argument
61 void sh_fault(register int sig) in sh_fault() argument
69 if(!(sig&SH_TRAP)) in sh_fault()
70 signal(sig, sh_fault); in sh_fault()
71 sig &= ~SH_TRAP; in sh_fault()
73 if(sig==SIGWINCH) in sh_fault()
88 shp->savesig = sig; in sh_fault()
91 trap = shp->st.trapcom[sig]; in sh_fault()
92 if(sig==SIGALRM && shp->bltinfun==b_sleep) in sh_fault()
97 shp->sigflag[sig] |= SH_SIGTRAP; in sh_fault()
101 if(shp->subshell && sig!=SIGINT && sig!=SIGQUIT && sig!=SIGWINCH && sig!=SIGCONT) in sh_fault()
103 shp->exitval = SH_EXITSIG|sig; in sh_fault()
111 flag = shp->sigflag[sig]&~SH_SIGOFF; in sh_fault()
114 if(sig==SIGINT && (shp->trapnote&SH_SIGIGNORE)) in sh_fault()
124 if(sig==SIGTERM && job.in_critical) in sh_fault()
128 shp->lastsig = sig; in sh_fault()
129 sigrelease(sig); in sh_fault()
134 if(sig==SIGABRT || (abortsig(sig) && (ptr = malloc(1)))) in sh_fault()
139 sh_done(shp,sig); in sh_fault()
144 if(sig <= shp->sigmax) in sh_fault()
145 shp->sigflag[sig] |= SH_SIGSET; in sh_fault()
147 if(abortsig(sig)) in sh_fault()
161 shp->lastsig = sig; in sh_fault()
167 if(sig==SIGHUP && job.curpgid) in sh_fault()
173 shp->lastsig = sig; in sh_fault()
176 if(sig==SIGTSTP) in sh_fault()
181 sigrelease(sig); in sh_fault()
190 action = (*shp->bltinfun)(-sig,(char**)0,(void*)0); in sh_fault()
200 if(sig <= shp->sigmax) in sh_fault()
201 shp->sigflag[sig] |= flag; in sh_fault()
206 sigrelease(sig); in sh_fault()
217 register int sig, n; in sh_siginit() local
222 if ((n = SIGRTMIN) > 0 && (sig = SIGRTMAX) > n && sig < SH_TRAP) in sh_siginit()
225 shp->sigruntime[SH_SIGRTMAX] = sig; in sh_siginit()
231 sig = (tp->sh_number&((1<<SH_SIGBITS)-1)); in sh_siginit()
232 if (!(sig-- & SH_TRAP)) in sh_siginit()
235 sig = shp->sigruntime[sig]; in sh_siginit()
236 if(sig>n && sig<SH_TRAP) in sh_siginit()
237 n = sig; in sh_siginit()
245 for(tp=shtab_signals; sig=tp->sh_number; tp++) in sh_siginit()
247 n = (sig>>SH_SIGBITS); in sh_siginit()
248 if((sig &= ((1<<SH_SIGBITS)-1)) > (shp->sigmax+1)) in sh_siginit()
250 sig--; in sh_siginit()
252 sig = shp->sigruntime[sig]; in sh_siginit()
253 if(sig>=0) in sh_siginit()
255 shp->sigflag[sig] = n; in sh_siginit()
257 shp->sigmsg[sig] = (char*)tp->sh_value; in sh_siginit()
265 void sh_sigtrap(register int sig) in sh_sigtrap() argument
270 if(sig==0) in sh_sigtrap()
272 else if(!((flag=sh.sigflag[sig])&(SH_SIGFAULT|SH_SIGOFF))) in sh_sigtrap()
275 if((fun=signal(sig,sh_fault))==SIG_IGN) in sh_sigtrap()
277 signal(sig,SIG_IGN); in sh_sigtrap()
283 if(sig==SIGALRM && fun!=SIG_DFL && fun!=sh_fault) in sh_sigtrap()
284 signal(sig,fun); in sh_sigtrap()
287 sh.sigflag[sig] = flag; in sh_sigtrap()
296 register int flag, sig = sh.sigmax; in sh_sigdone() local
298 for(sig=sh.sigmax; sig>0; sig--) in sh_sigdone()
300 flag = sh.sigflag[sig]; in sh_sigdone()
302 sh_sigtrap(sig); in sh_sigdone()
314 register int flag, sig=sh.st.trapmax; in sh_sigreset() local
315 while(sig-- > 0) in sh_sigreset()
317 if(trap=sh.st.trapcom[sig]) in sh_sigreset()
319 flag = sh.sigflag[sig]&~(SH_SIGTRAP|SH_SIGSET); in sh_sigreset()
324 sh.st.trapcom[sig] = 0; in sh_sigreset()
326 else if(sig && mode>1) in sh_sigreset()
328 if(sig!=SIGCHLD) in sh_sigreset()
329 signal(sig,SIG_IGN); in sh_sigreset()
333 sh.sigflag[sig] = flag; in sh_sigreset()
336 for(sig=SH_DEBUGTRAP-1;sig>=0;sig--) in sh_sigreset()
338 if(trap=sh.st.trap[sig]) in sh_sigreset()
342 sh.st.trap[sig] = 0; in sh_sigreset()
355 void sh_sigclear(register int sig) in sh_sigclear() argument
357 register int flag = sh.sigflag[sig]; in sh_sigclear()
363 if(trap=sh.st.trapcom[sig]) in sh_sigclear()
367 sh.st.trapcom[sig]=0; in sh_sigclear()
369 sh.sigflag[sig] = flag; in sh_sigclear()
378 register int sig=sh.st.trapmax; in sh_chktrap() local
381 sig=0; in sh_chktrap()
409 while(--sig>=0) in sh_chktrap()
412 if(sig==SIGCHLD) in sh_chktrap()
415 if(sh.sigflag[sig]&SH_SIGTRAP) in sh_chktrap()
417 sh.sigflag[sig] &= ~SH_SIGTRAP; in sh_chktrap()
418 if(trap=sh.st.trapcom[sig]) in sh_chktrap()
421 if(sig==SIGPIPE && (fp=sfpool((Sfio_t*)0,sh.outpool,SF_WRITE)) && sferror(fp)) in sh_chktrap()
423 sh.oldexit = SH_EXITSIG|sig; in sh_chktrap()
503 register int sig=0; in sh_exit() local
507 shp->exitval |= (sig=shp->lastsig); in sh_exit()
523 if(!shp->subshell && (sig=sh_fork(0,NIL(int*)))) in sh_exit()
527 job_wait(sig); in sh_exit()
564 sh_done(shp,sig); in sh_exit()
570 sh_done(shp,sig); in sh_exit()
587 void sh_done(void *ptr, register int sig) in sh_done() argument
594 if(sig) in sh_done()
595 savxit = SH_EXITSIG|sig; in sh_done()
621 …if((sh_isoption(SH_INTERACTIVE) && shp->login_sh) || (!sh_isoption(SH_INTERACTIVE) && (sig==SIGHUP… in sh_done()
631 sig = savxit&SH_EXITMASK; in sh_done()
632 if(sig) in sh_done()
635 signal(sig,SIG_DFL); in sh_done()
636 sigrelease(sig); in sh_done()
637 kill(getpid(),sig); in sh_done()