Lines Matching refs:sig

40 #define abortsig(sig)	(sig==SIGABRT || sig==SIGBUS || sig==SIGILL || sig==SIGSEGV)  argument
63 void sh_fault(register int sig) in sh_fault() argument
71 if(!(sig&SH_TRAP)) in sh_fault()
72 signal(sig, sh_fault); in sh_fault()
73 sig &= ~SH_TRAP; in sh_fault()
75 if(sig==SIGWINCH) in sh_fault()
87 trap = shp->st.trapcom[sig]; in sh_fault()
91 if(!(shp->sigflag[sig]&SH_SIGIGNORE)) in sh_fault()
92 shp->savesig = sig; in sh_fault()
95 if(sig==SIGALRM && shp->bltinfun==b_sleep) in sh_fault()
100 shp->sigflag[sig] |= SH_SIGTRAP; in sh_fault()
104 if(shp->subshell && trap && sig!=SIGINT && sig!=SIGQUIT && sig!=SIGWINCH && sig!=SIGCONT) in sh_fault()
106 shp->exitval = SH_EXITSIG|sig; in sh_fault()
114 flag = shp->sigflag[sig]&~SH_SIGOFF; in sh_fault()
117 if(sig==SIGINT && (shp->trapnote&SH_SIGIGNORE)) in sh_fault()
122 shp->ignsig = sig; in sh_fault()
123 sigrelease(sig); in sh_fault()
132 if(sig==SIGTERM && job.in_critical) in sh_fault()
136 shp->lastsig = sig; in sh_fault()
137 sigrelease(sig); in sh_fault()
147 if(sig==SIGABRT || (abortsig(sig) && (ptr = malloc(1)))) in sh_fault()
151 sh_done(shp,sig); in sh_fault()
155 if(sig <= shp->gd->sigmax) in sh_fault()
156 shp->sigflag[sig] |= SH_SIGSET; in sh_fault()
158 if(abortsig(sig)) in sh_fault()
172 shp->lastsig = sig; in sh_fault()
178 if(sig==SIGHUP && job.curpgid) in sh_fault()
184 shp->lastsig = sig; in sh_fault()
187 if(sig==SIGTSTP) in sh_fault()
192 sigrelease(sig); in sh_fault()
201 action = (*shp->bltinfun)(-sig,(char**)0,(void*)0); in sh_fault()
211 if(sig <= shp->gd->sigmax) in sh_fault()
212 shp->sigflag[sig] |= flag; in sh_fault()
217 sigrelease(sig); in sh_fault()
228 register int sig, n; in sh_siginit() local
233 if ((n = SIGRTMIN) > 0 && (sig = SIGRTMAX) > n && sig < SH_TRAP) in sh_siginit()
236 shp->gd->sigruntime[SH_SIGRTMAX] = sig; in sh_siginit()
242 sig = (tp->sh_number&((1<<SH_SIGBITS)-1)); in sh_siginit()
243 if (!(sig-- & SH_TRAP)) in sh_siginit()
246 sig = shp->gd->sigruntime[sig]; in sh_siginit()
247 if(sig>n && sig<SH_TRAP) in sh_siginit()
248 n = sig; in sh_siginit()
256 for(tp=shtab_signals; sig=tp->sh_number; tp++) in sh_siginit()
258 n = (sig>>SH_SIGBITS); in sh_siginit()
259 if((sig &= ((1<<SH_SIGBITS)-1)) > (shp->gd->sigmax+1)) in sh_siginit()
261 sig--; in sh_siginit()
263 sig = shp->gd->sigruntime[sig]; in sh_siginit()
264 if(sig>=0) in sh_siginit()
266 shp->sigflag[sig] = n; in sh_siginit()
268 shp->gd->sigmsg[sig] = (char*)tp->sh_value; in sh_siginit()
276 void sh_sigtrap(register int sig) in sh_sigtrap() argument
281 if(sig==0) in sh_sigtrap()
283 else if(!((flag=sh.sigflag[sig])&(SH_SIGFAULT|SH_SIGOFF))) in sh_sigtrap()
286 if((fun=signal(sig,sh_fault))==SIG_IGN) in sh_sigtrap()
288 signal(sig,SIG_IGN); in sh_sigtrap()
294 if(sig==SIGALRM && fun!=SIG_DFL && fun!=sh_fault) in sh_sigtrap()
295 signal(sig,fun); in sh_sigtrap()
298 sh.sigflag[sig] = flag; in sh_sigtrap()
307 register int flag, sig = shgd->sigmax; in sh_sigdone() local
309 for(sig=shgd->sigmax; sig>0; sig--) in sh_sigdone()
311 flag = sh.sigflag[sig]; in sh_sigdone()
313 sh_sigtrap(sig); in sh_sigdone()
325 register int flag, sig=sh.st.trapmax; in sh_sigreset() local
326 while(sig-- > 0) in sh_sigreset()
328 if(trap=sh.st.trapcom[sig]) in sh_sigreset()
330 flag = sh.sigflag[sig]&~(SH_SIGTRAP|SH_SIGSET); in sh_sigreset()
335 sh.st.trapcom[sig] = 0; in sh_sigreset()
337 else if(sig && mode>1) in sh_sigreset()
339 if(sig!=SIGCHLD) in sh_sigreset()
340 signal(sig,SIG_IGN); in sh_sigreset()
344 sh.sigflag[sig] = flag; in sh_sigreset()
347 for(sig=SH_DEBUGTRAP-1;sig>=0;sig--) in sh_sigreset()
349 if(trap=sh.st.trap[sig]) in sh_sigreset()
353 sh.st.trap[sig] = 0; in sh_sigreset()
366 void sh_sigclear(register int sig) in sh_sigclear() argument
368 register int flag = sh.sigflag[sig]; in sh_sigclear()
374 if(trap=sh.st.trapcom[sig]) in sh_sigclear()
378 sh.st.trapcom[sig]=0; in sh_sigclear()
380 sh.sigflag[sig] = flag; in sh_sigclear()
389 register int sig=shp->st.trapmax; in sh_chktrap() local
392 sig=0; in sh_chktrap()
420 while(--sig>=0) in sh_chktrap()
422 if(sig==cursig) in sh_chktrap()
425 if(sig==SIGCHLD) in sh_chktrap()
428 if(shp->sigflag[sig]&SH_SIGTRAP) in sh_chktrap()
430 shp->sigflag[sig] &= ~SH_SIGTRAP; in sh_chktrap()
431 if(trap=shp->st.trapcom[sig]) in sh_chktrap()
433 cursig = sig; in sh_chktrap()
514 register int sig=0; in sh_exit() local
518 shp->exitval |= (sig=shp->lastsig); in sh_exit()
537 if(!shp->subshell && (sig=sh_fork(shp,0,NIL(int*)))) in sh_exit()
541 job_wait(sig); in sh_exit()
578 sh_done(shp,sig); in sh_exit()
586 sh_done(shp,sig); in sh_exit()
603 void sh_done(void *ptr, register int sig) in sh_done() argument
610 if(sig) in sh_done()
611 savxit = SH_EXITSIG|sig; in sh_done()
637 …if((sh_isoption(SH_INTERACTIVE) && shp->login_sh) || (!sh_isoption(SH_INTERACTIVE) && (sig==SIGHUP… in sh_done()
647 sig = savxit&SH_EXITMASK; in sh_done()
648 if(sig) in sh_done()
662 signal(sig,SIG_DFL); in sh_done()
663 sigrelease(sig); in sh_done()
664 kill(getpid(),sig); in sh_done()