diff options
author | rwatson <rwatson@FreeBSD.org> | 2003-10-25 16:43:50 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2003-10-25 16:43:50 +0000 |
commit | b43632b1530ca6326d49c59f7aa08f97feeea2d2 (patch) | |
tree | 7db46dacce2325b7a771dd877050bc6ef60509c5 /sys/kern/kern_sig.c | |
parent | e4935eb9ae5e1423e2efddfa52176de132ced5a8 (diff) | |
download | FreeBSD-src-b43632b1530ca6326d49c59f7aa08f97feeea2d2.zip FreeBSD-src-b43632b1530ca6326d49c59f7aa08f97feeea2d2.tar.gz |
Check (locked) before performing an advisory unlock following a failure
of vn_start_write(). Otherwise, we may inconsistently attempt to release
the advisory lock.
Pointed out by: teggej
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r-- | sys/kern/kern_sig.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 0b14a4d..ab98bb0 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -2579,7 +2579,8 @@ restart: if (vn_start_write(vp, &mp, V_NOWAIT) != 0) { lf.l_type = F_UNLCK; - VOP_ADVLOCK(vp, (caddr_t)p, F_UNLCK, &lf, F_FLOCK); + if (locked) + VOP_ADVLOCK(vp, (caddr_t)p, F_UNLCK, &lf, F_FLOCK); if ((error = vn_close(vp, FWRITE, cred, td)) != 0) return (error); if ((error = vn_start_write(NULL, &mp, V_XSLEEP | PCATCH)) != 0) |