Module Name: src Committed By: snj Date: Tue Mar 31 23:38:41 UTC 2009
Modified Files: src/sys/kern [netbsd-5]: kern_descrip.c Log Message: Pull up following revision(s) (requested by rmind in ticket #619): sys/kern/kern_descrip.c: revision 1.189 fownsignal: pre-check for zero pgid, avoids locking of proc_lock. To generate a diff of this commit: cvs rdiff -u -r1.182.6.4 -r1.182.6.5 src/sys/kern/kern_descrip.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_descrip.c diff -u src/sys/kern/kern_descrip.c:1.182.6.4 src/sys/kern/kern_descrip.c:1.182.6.5 --- src/sys/kern/kern_descrip.c:1.182.6.4 Wed Mar 18 05:33:23 2009 +++ src/sys/kern/kern_descrip.c Tue Mar 31 23:38:41 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_descrip.c,v 1.182.6.4 2009/03/18 05:33:23 snj Exp $ */ +/* $NetBSD: kern_descrip.c,v 1.182.6.5 2009/03/31 23:38:41 snj Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_descrip.c,v 1.182.6.4 2009/03/18 05:33:23 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_descrip.c,v 1.182.6.5 2009/03/31 23:38:41 snj Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1845,22 +1845,36 @@ void fownsignal(pid_t pgid, int signo, int code, int band, void *fdescdata) { - struct proc *p1; - struct pgrp *pgrp; ksiginfo_t ksi; KASSERT(!cpu_intr_p()); + if (pgid == 0) { + return; + } + KSI_INIT(&ksi); ksi.ksi_signo = signo; ksi.ksi_code = code; ksi.ksi_band = band; mutex_enter(proc_lock); - if (pgid > 0 && (p1 = p_find(pgid, PFIND_LOCKED))) - kpsignal(p1, &ksi, fdescdata); - else if (pgid < 0 && (pgrp = pg_find(-pgid, PFIND_LOCKED))) - kpgsignal(pgrp, &ksi, fdescdata, 0); + if (pgid > 0) { + struct proc *p1; + + p1 = p_find(pgid, PFIND_LOCKED); + if (p1 != NULL) { + kpsignal(p1, &ksi, fdescdata); + } + } else { + struct pgrp *pgrp; + + KASSERT(pgid < 0); + pgrp = pg_find(-pgid, PFIND_LOCKED); + if (pgrp != NULL) { + kpgsignal(pgrp, &ksi, fdescdata, 0); + } + } mutex_exit(proc_lock); }