Lines Matching full:sig

105 static int	killpg1(struct thread *td, int sig, int pgid, int all,
109 static int sigprop(int sig);
115 static struct thread *sigtd(struct proc *p, int sig, bool fast_sigblock);
261 sig = __i * sizeof((set)->__bits[0]) * NBBY + __sig; \
284 int old_boundary, sig; in ast_sig() local
329 while ((sig = cursig(td)) != 0) { in ast_sig()
330 KASSERT(sig >= 0, ("sig %d", sig)); in ast_sig()
331 postsig(sig); in ast_sig()
772 sigprop(int sig) in sigprop() argument
775 if (sig > 0 && sig < nitems(sigproptbl)) in sigprop()
776 return (sigproptbl[sig]); in sigprop()
801 kern_sigaction(struct thread *td, int sig, const struct sigaction *act, in kern_sigaction() argument
807 if (!_SIG_VALID(sig)) in kern_sigaction()
820 oact->sa_mask = ps->ps_catchmask[_SIG_IDX(sig)]; in kern_sigaction()
821 if (SIGISMEMBER(ps->ps_sigonstack, sig)) in kern_sigaction()
823 if (!SIGISMEMBER(ps->ps_sigintr, sig)) in kern_sigaction()
825 if (SIGISMEMBER(ps->ps_sigreset, sig)) in kern_sigaction()
827 if (SIGISMEMBER(ps->ps_signodefer, sig)) in kern_sigaction()
829 if (SIGISMEMBER(ps->ps_siginfo, sig)) { in kern_sigaction()
832 (__siginfohandler_t *)ps->ps_sigact[_SIG_IDX(sig)]; in kern_sigaction()
834 oact->sa_handler = ps->ps_sigact[_SIG_IDX(sig)]; in kern_sigaction()
835 if (sig == SIGCHLD && ps->ps_flag & PS_NOCLDSTOP) in kern_sigaction()
837 if (sig == SIGCHLD && ps->ps_flag & PS_NOCLDWAIT) in kern_sigaction()
841 if ((sig == SIGKILL || sig == SIGSTOP) && in kern_sigaction()
852 ps->ps_catchmask[_SIG_IDX(sig)] = act->sa_mask; in kern_sigaction()
853 SIG_CANTMASK(ps->ps_catchmask[_SIG_IDX(sig)]); in kern_sigaction()
855 ps->ps_sigact[_SIG_IDX(sig)] = in kern_sigaction()
857 SIGADDSET(ps->ps_siginfo, sig); in kern_sigaction()
859 ps->ps_sigact[_SIG_IDX(sig)] = act->sa_handler; in kern_sigaction()
860 SIGDELSET(ps->ps_siginfo, sig); in kern_sigaction()
863 SIGADDSET(ps->ps_sigintr, sig); in kern_sigaction()
865 SIGDELSET(ps->ps_sigintr, sig); in kern_sigaction()
867 SIGADDSET(ps->ps_sigonstack, sig); in kern_sigaction()
869 SIGDELSET(ps->ps_sigonstack, sig); in kern_sigaction()
871 SIGADDSET(ps->ps_sigreset, sig); in kern_sigaction()
873 SIGDELSET(ps->ps_sigreset, sig); in kern_sigaction()
875 SIGADDSET(ps->ps_signodefer, sig); in kern_sigaction()
877 SIGDELSET(ps->ps_signodefer, sig); in kern_sigaction()
878 if (sig == SIGCHLD) { in kern_sigaction()
907 if (ps->ps_sigact[_SIG_IDX(sig)] == SIG_IGN || in kern_sigaction()
908 (sigprop(sig) & SIGPROP_IGNORE && in kern_sigaction()
909 ps->ps_sigact[_SIG_IDX(sig)] == SIG_DFL)) { in kern_sigaction()
911 sigqueue_delete_proc(p, sig); in kern_sigaction()
912 if (sig != SIGCONT) in kern_sigaction()
914 SIGADDSET(ps->ps_sigignore, sig); in kern_sigaction()
915 SIGDELSET(ps->ps_sigcatch, sig); in kern_sigaction()
917 SIGDELSET(ps->ps_sigignore, sig); in kern_sigaction()
918 if (ps->ps_sigact[_SIG_IDX(sig)] == SIG_DFL) in kern_sigaction()
919 SIGDELSET(ps->ps_sigcatch, sig); in kern_sigaction()
921 SIGADDSET(ps->ps_sigcatch, sig); in kern_sigaction()
924 if (ps->ps_sigact[_SIG_IDX(sig)] == SIG_IGN || in kern_sigaction()
925 ps->ps_sigact[_SIG_IDX(sig)] == SIG_DFL || in kern_sigaction()
927 SIGDELSET(ps->ps_freebsd4, sig); in kern_sigaction()
929 SIGADDSET(ps->ps_freebsd4, sig); in kern_sigaction()
932 if (ps->ps_sigact[_SIG_IDX(sig)] == SIG_IGN || in kern_sigaction()
933 ps->ps_sigact[_SIG_IDX(sig)] == SIG_DFL || in kern_sigaction()
935 SIGDELSET(ps->ps_osigset, sig); in kern_sigaction()
937 SIGADDSET(ps->ps_osigset, sig); in kern_sigaction()
947 int sig; member
966 error = kern_sigaction(td, uap->sig, actp, oactp, 0); in sys_sigaction()
975 int sig; member
994 error = kern_sigaction(td, uap->sig, actp, oactp, KSA_FREEBSD4); in freebsd4_sigaction()
1078 sigdflt(struct sigacts *ps, int sig) in sigdflt() argument
1082 SIGDELSET(ps->ps_sigcatch, sig); in sigdflt()
1083 if ((sigprop(sig) & SIGPROP_IGNORE) != 0 && sig != SIGCONT) in sigdflt()
1084 SIGADDSET(ps->ps_sigignore, sig); in sigdflt()
1085 ps->ps_sigact[_SIG_IDX(sig)] = SIG_DFL; in sigdflt()
1086 SIGDELSET(ps->ps_siginfo, sig); in sigdflt()
1275 error = copyout(&ksi.ksi_signo, uap->sig, sizeof(ksi.ksi_signo)); in sys_sigwait()
1357 int error, sig, timevalid = 0; in kern_sigtimedwait() local
1400 sig = cursig(td); in kern_sigtimedwait()
1402 KASSERT(sig >= 0, ("sig %d", sig)); in kern_sigtimedwait()
1403 if (sig != 0 && SIGISMEMBER(waitset, sig)) { in kern_sigtimedwait()
1404 if (sigqueue_get(&td->td_sigqueue, sig, ksi) != 0 || in kern_sigtimedwait()
1405 sigqueue_get(&p->p_sigqueue, sig, ksi) != 0) { in kern_sigtimedwait()
1460 SDT_PROBE2(proc, , , signal__clear, sig, ksi); in kern_sigtimedwait()
1470 action = ps->ps_sigact[_SIG_IDX(sig)]; in kern_sigtimedwait()
1472 ktrpsig(sig, action, &td->td_sigmask, ksi->ksi_code); in kern_sigtimedwait()
1475 if (sig == SIGKILL) { in kern_sigtimedwait()
1477 sigexit(td, sig); in kern_sigtimedwait()
1627 int has_sig, sig; in kern_sigsuspend() local
1658 while ((sig = cursig(td)) != 0) { in kern_sigsuspend()
1659 KASSERT(sig >= 0, ("sig %d", sig)); in kern_sigsuspend()
1660 has_sig += postsig(sig); in kern_sigsuspend()
1795 int sig; member
1806 err = p_cansignal(arg->td, p, arg->sig); in killpg1_sendsig_locked()
1807 if (err == 0 && arg->sig != 0) in killpg1_sendsig_locked()
1808 pksignal(p, arg->sig, arg->ksi); in killpg1_sendsig_locked()
1847 killpg1(struct thread *td, int sig, int pgid, int all, ksiginfo_t *ksi) in killpg1() argument
1855 arg.sig = sig; in killpg1()
2083 pgsignal(struct pgrp *pgrp, int sig, int checkctty, ksiginfo_t *ksi) in pgsignal() argument
2093 pksignal(p, sig, ksi); in pgsignal()
2106 postsig_done(int sig, struct thread *td, struct sigacts *ps) in postsig_done() argument
2112 mask = ps->ps_catchmask[_SIG_IDX(sig)]; in postsig_done()
2113 if (!SIGISMEMBER(ps->ps_signodefer, sig)) in postsig_done()
2114 SIGADDSET(mask, sig); in postsig_done()
2117 if (SIGISMEMBER(ps->ps_sigreset, sig)) in postsig_done()
2118 sigdflt(ps, sig); in postsig_done()
2132 int sig; in trapsignal() local
2135 sig = ksi->ksi_signo; in trapsignal()
2136 KASSERT(_SIG_VALID(sig), ("invalid signal")); in trapsignal()
2145 if ((p->p_flag & P_TRACED) == 0 && SIGISMEMBER(ps->ps_sigcatch, sig) && in trapsignal()
2146 !SIGISMEMBER(sigmask, sig)) { in trapsignal()
2149 ktrpsig(sig, ps->ps_sigact[_SIG_IDX(sig)], in trapsignal()
2152 (*p->p_sysent->sv_sendsig)(ps->ps_sigact[_SIG_IDX(sig)], in trapsignal()
2154 postsig_done(sig, td, ps); in trapsignal()
2162 if (kern_forcesigexit && (SIGISMEMBER(sigmask, sig) || in trapsignal()
2163 ps->ps_sigact[_SIG_IDX(sig)] == SIG_IGN)) { in trapsignal()
2164 SIGDELSET(td->td_sigmask, sig); in trapsignal()
2165 SIGDELSET(ps->ps_sigcatch, sig); in trapsignal()
2166 SIGDELSET(ps->ps_sigignore, sig); in trapsignal()
2167 ps->ps_sigact[_SIG_IDX(sig)] = SIG_DFL; in trapsignal()
2172 p->p_sig = sig; /* XXX to verify code */ in trapsignal()
2173 tdsendsignal(p, td, sig, ksi); in trapsignal()
2179 sigtd(struct proc *p, int sig, bool fast_sigblock) in sigtd() argument
2190 if (curproc == p && !SIGISMEMBER(curthread->td_sigmask, sig) && in sigtd()
2197 if (!SIGISMEMBER(td->td_sigmask, sig) && (!fast_sigblock || in sigtd()
2228 kern_psignal(struct proc *p, int sig) in kern_psignal() argument
2233 ksi.ksi_signo = sig; in kern_psignal()
2235 (void) tdsendsignal(p, NULL, sig, &ksi); in kern_psignal()
2239 pksignal(struct proc *p, int sig, ksiginfo_t *ksi) in pksignal() argument
2242 return (tdsendsignal(p, NULL, sig, ksi)); in pksignal()
2264 tdsignal(struct thread *td, int sig) in tdsignal() argument
2269 ksi.ksi_signo = sig; in tdsignal()
2271 (void) tdsendsignal(td->td_proc, td, sig, &ksi); in tdsignal()
2275 tdksignal(struct thread *td, int sig, ksiginfo_t *ksi) in tdksignal() argument
2278 (void) tdsendsignal(td->td_proc, td, sig, ksi); in tdksignal()
2293 tdsendsignal(struct proc *p, struct thread *td, int sig, ksiginfo_t *ksi) in tdsendsignal() argument
2303 if (!_SIG_VALID(sig)) in tdsendsignal()
2304 panic("%s(): invalid signal %d", __func__, sig); in tdsendsignal()
2318 KNOTE_LOCKED(p->p_klist, NOTE_SIGNAL | sig); in tdsendsignal()
2319 prop = sigprop(sig); in tdsendsignal()
2322 td = sigtd(p, sig, false); in tdsendsignal()
2327 SDT_PROBE3(proc, , , signal__send, td, p, sig); in tdsendsignal()
2336 if (SIGISMEMBER(ps->ps_sigignore, sig)) { in tdsendsignal()
2339 SDT_PROBE3(proc, , , signal__discard, td, p, sig); in tdsendsignal()
2350 if (SIGISMEMBER(td->td_sigmask, sig)) in tdsendsignal()
2352 else if (SIGISMEMBER(ps->ps_sigcatch, sig)) in tdsendsignal()
2356 if (SIGISMEMBER(ps->ps_sigintr, sig)) in tdsendsignal()
2388 ret = sigqueue_add(sigqueue, sig, ksi); in tdsendsignal()
2411 if (sig == SIGKILL) { in tdsendsignal()
2458 sigqueue_delete(sigqueue, sig); in tdsendsignal()
2490 sigqueue_delete(sigqueue, sig); in tdsendsignal()
2516 tdsigwakeup(td, sig, action, intrval); in tdsendsignal()
2526 p->p_xsig = sig; in tdsendsignal()
2546 sigqueue_delete(sigqueue, sig); in tdsendsignal()
2555 tdsigwakeup(td, sig, action, intrval); in tdsendsignal()
2572 tdsigwakeup(struct thread *td, int sig, sig_t action, int intrval) in tdsigwakeup() argument
2578 prop = sigprop(sig); in tdsigwakeup()
2608 sigqueue_delete(&p->p_sigqueue, sig); in tdsigwakeup()
2613 sigqueue_delete(&td->td_sigqueue, sig); in tdsigwakeup()
2831 ptracestop(struct thread *td, int sig, ksiginfo_t *si) in ptracestop() argument
2842 td->td_xsig = sig; in ptracestop()
2846 CTR4(KTR_PTRACE, "ptracestop: tid %d (pid %d) flags %#x sig %d", in ptracestop()
2847 td->td_tid, p->p_pid, td->td_dbgflags, sig); in ptracestop()
2886 p->p_xsig = sig; in ptracestop()
2932 if (si != NULL && sig == td->td_xsig) { in ptracestop()
2935 if (sigqueue_add(&td->td_sigqueue, sig, si) != 0) in ptracestop()
2959 int sig; in reschedule_signals() local
2970 SIG_FOREACH(sig, &block) { in reschedule_signals()
2971 td = sigtd(p, sig, fastblk); in reschedule_signals()
2985 (SIGISMEMBER(ps->ps_sigcatch, sig) && in reschedule_signals()
2986 !SIGISMEMBER(td->td_sigmask, sig))) { in reschedule_signals()
2987 tdsigwakeup(td, sig, SIG_CATCH, in reschedule_signals()
2988 (SIGISMEMBER(ps->ps_sigintr, sig) ? EINTR : in reschedule_signals()
3110 * The thread has signal "sig" pending. Figure out what to do with it:
3120 sigprocess(struct thread *td, int sig) in sigprocess() argument
3128 KASSERT(_SIG_VALID(sig), ("%s: invalid signal %d", __func__, sig)); in sigprocess()
3140 if (SIGISMEMBER(ps->ps_sigignore, sig) && in sigprocess()
3165 if (sigqueue_get(queue, sig, &ksi) == 0) { in sigprocess()
3167 sigqueue_get(queue, sig, &ksi); in sigprocess()
3172 sig = ptracestop(td, sig, &ksi); in sigprocess()
3181 if (sig == 0) in sigprocess()
3187 if (SIGISMEMBER(td->td_sigmask, sig)) { in sigprocess()
3189 sigqueue_add(&p->p_sigqueue, sig, &ksi); in sigprocess()
3201 sigqueue_add(queue, sig, &ksi); in sigprocess()
3212 switch ((intptr_t)p->p_sigacts->ps_sigact[_SIG_IDX(sig)]) { in sigprocess()
3224 (u_long)p->p_pid, sig); in sigprocess()
3236 prop = sigprop(sig); in sigprocess()
3254 sigqueue_delete(&td->td_sigqueue, sig); in sigprocess()
3255 sigqueue_delete(&p->p_sigqueue, sig); in sigprocess()
3257 p->p_xsig = sig; in sigprocess()
3298 * while (sig = cursig(curthread))
3299 * postsig(sig);
3306 int sig; in issignal() local
3353 SIG_FOREACH(sig, &sigpending) { in issignal()
3354 switch (sigprocess(td, sig)) { in issignal()
3356 return (sig); in issignal()
3360 sigqueue_delete(&td->td_sigqueue, sig); in issignal()
3361 sigqueue_delete(&p->p_sigqueue, sig); in issignal()
3397 postsig(int sig) in postsig() argument
3406 KASSERT(sig != 0, ("postsig")); in postsig()
3414 if (sigqueue_get(&td->td_sigqueue, sig, &ksi) == 0 && in postsig()
3415 sigqueue_get(&p->p_sigqueue, sig, &ksi) == 0) in postsig()
3417 ksi.ksi_signo = sig; in postsig()
3420 action = ps->ps_sigact[_SIG_IDX(sig)]; in postsig()
3423 ktrpsig(sig, action, td->td_pflags & TDP_OLDMASK ? in postsig()
3434 sigexit(td, sig); in postsig()
3441 KASSERT(!SIGISMEMBER(td->td_sigmask, sig), in postsig()
3442 ("postsig action: blocked sig %d", sig)); in postsig()
3459 if (p->p_sig == sig) { in postsig()
3463 postsig_done(sig, td, ps); in postsig()
3490 int ret, sig; in sig_ast_needsigchk() local
3500 sig = cursig(td); in sig_ast_needsigchk()
3501 if (sig == -1) { in sig_ast_needsigchk()
3510 } else if (sig != 0) { in sig_ast_needsigchk()
3511 ret = SIGISMEMBER(ps->ps_sigintr, sig) ? EINTR : ERESTART; in sig_ast_needsigchk()
3612 sigexit(struct thread *td, int sig) in sigexit() argument
3637 if ((sigprop(sig) & SIGPROP_CORE) && in sigexit()
3639 p->p_sig = sig; in sigexit()
3650 sig |= WCOREFLAG; in sigexit()
3672 sig &~ WCOREFLAG, coreinfo); in sigexit()
3675 exit1(td, 0, sig); in sigexit()
3702 childproc_jobstate(struct proc *p, int reason, int sig) in childproc_jobstate() argument
3722 sigparent(p, reason, sig); in childproc_jobstate()
4265 pgsigio(struct sigio **sigiop, int sig, int checkctty) in pgsigio() argument
4271 ksi.ksi_signo = sig; in pgsigio()
4283 kern_psignal(sigio->sio_proc, sig); in pgsigio()
4294 kern_psignal(p, sig); in pgsigio()
4389 int sig; in sig_drop_caught() local
4395 SIG_FOREACH(sig, &ps->ps_sigcatch) { in sig_drop_caught()
4396 sigdflt(ps, sig); in sig_drop_caught()
4397 if ((sigprop(sig) & SIGPROP_IGNORE) != 0) in sig_drop_caught()
4398 sigqueue_delete_proc(p, sig); in sig_drop_caught()