Date: Tue, 25 Apr 2006 19:48:19 GMT From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 96090 for review Message-ID: <200604251948.k3PJmJ8g025246@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=96090 Change 96090 by jhb@jhb_slimer on 2006/04/25 19:47:56 Use fget(). Affected files ... .. //depot/projects/smpng/sys/kern/kern_event.c#45 edit Differences ... ==== //depot/projects/smpng/sys/kern/kern_event.c#45 (text+ko) ==== @@ -754,15 +754,12 @@ int kqueue_register(struct kqueue *kq, struct kevent *kev, struct thread *td, int waitok) { - struct filedesc *fdp; struct filterops *fops; struct file *fp; struct knote *kn, *tkn; int error, filt, event; int haskqglobal; - int fd; - fdp = NULL; fp = NULL; kn = NULL; error = 0; @@ -778,22 +775,13 @@ findkn: if (fops->f_isfd) { KASSERT(td != NULL, ("td is NULL")); - fdp = td->td_proc->p_fd; - FILEDESC_LOCK(fdp); - /* validate descriptor */ - fd = kev->ident; - if (fd < 0 || fd >= fdp->fd_nfiles || - (fp = fdp->fd_ofiles[fd]) == NULL) { - FILEDESC_UNLOCK(fdp); - error = EBADF; + error = fget(td, kev->ident, &fp); + if (error) goto done; - } - fhold(fp); if ((kev->flags & EV_ADD) == EV_ADD && kqueue_expand(kq, fops, kev->ident, 0) != 0) { - /* unlock and try again */ - FILEDESC_UNLOCK(fdp); + /* try again */ fdrop(fp, td); fp = NULL; error = kqueue_expand(kq, fops, kev->ident, waitok); @@ -811,7 +799,6 @@ * they are the same thing. */ if (fp->f_data == kq) { - FILEDESC_UNLOCK(fdp); error = EINVAL; goto done_noglobal; } @@ -819,7 +806,6 @@ KQ_GLOBAL_LOCK(&kq_global, haskqglobal); } - FILEDESC_UNLOCK(fdp); KQ_LOCK(kq); if (kev->ident < kq->kq_knlistsize) { SLIST_FOREACH(kn, &kq->kq_knlist[kev->ident], kn_link)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200604251948.k3PJmJ8g025246>