Deleted Added
full compact
28c28
< __FBSDID("$FreeBSD: head/sys/kern/kern_thr.c 170404 2007-06-07 19:45:19Z jhb $");
---
> __FBSDID("$FreeBSD: head/sys/kern/kern_thr.c 171859 2007-08-16 05:26:42Z davidxu $");
55a56,57
> #include <security/audit/audit.h>
>
339a342,394
> thr_kill2(struct thread *td, struct thr_kill2_args *uap)
> /* pid_t pid, long id, int sig */
> {
> struct thread *ttd;
> struct proc *p;
> int error;
>
> AUDIT_ARG(signum, uap->sig);
>
> if (uap->pid == td->td_proc->p_pid) {
> p = td->td_proc;
> PROC_LOCK(p);
> } else if ((p = pfind(uap->pid)) == NULL) {
> return (ESRCH);
> }
> AUDIT_ARG(process, p);
>
> error = p_cansignal(td, p, uap->sig);
> if (error == 0) {
> if (uap->id == -1) {
> if (uap->sig != 0 && !_SIG_VALID(uap->sig)) {
> error = EINVAL;
> } else {
> error = ESRCH;
> FOREACH_THREAD_IN_PROC(p, ttd) {
> if (ttd != td) {
> error = 0;
> if (uap->sig == 0)
> break;
> tdsignal(p, ttd, uap->sig, NULL);
> }
> }
> }
> } else {
> if (uap->id != td->td_tid)
> ttd = thread_find(p, uap->id);
> else
> ttd = td;
> if (ttd == NULL)
> error = ESRCH;
> else if (uap->sig == 0)
> ;
> else if (!_SIG_VALID(uap->sig))
> error = EINVAL;
> else
> tdsignal(p, ttd, uap->sig, NULL);
> }
> }
> PROC_UNLOCK(p);
> return (error);
> }
>
> int