PERFORCE change 100257 for review
Kip Macy
kmacy at FreeBSD.org
Thu Jun 29 04:11:33 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=100257
Change 100257 by kmacy at kmacy_storage:sun4v_work_stable on 2006/06/29 04:10:44
fix an LOR with Giant in fcntl
Affected files ...
.. //depot/projects/kmacy_sun4v_stable/src/sys/kern/kern_descrip.c#4 integrate
Differences ...
==== //depot/projects/kmacy_sun4v_stable/src/sys/kern/kern_descrip.c#4 (text+ko) ====
@@ -365,18 +365,24 @@
flg = F_POSIX;
p = td->td_proc;
fdp = p->p_fd;
+ retry:
FILEDESC_LOCK(fdp);
if ((unsigned)fd >= fdp->fd_nfiles ||
(fp = fdp->fd_ofiles[fd]) == NULL) {
FILEDESC_UNLOCK(fdp);
+ if (giant_locked)
+ mtx_unlock(&Giant);
error = EBADF;
goto done2;
}
pop = &fdp->fd_ofileflags[fd];
- if ((fp->f_ops->fo_flags & DFLAG_MPSAFE) == 0) {
+ if ((giant_locked == 0) && ((fp->f_ops->fo_flags & DFLAG_MPSAFE) == 0)) {
+ FILEDESC_UNLOCK(fdp);
mtx_lock(&Giant);
giant_locked = 1;
+ /* we may have lost a race */
+ goto retry;
}
switch (cmd) {
case F_DUPFD:
More information about the p4-projects
mailing list