Index: kern_sig.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_sig.c,v
retrieving revision 1.257
diff -u -r1.257 kern_sig.c
--- kern_sig.c	10 Aug 2003 23:05:37 -0000	1.257
+++ kern_sig.c	26 Aug 2003 02:54:13 -0000
@@ -2516,7 +2516,7 @@
 	struct flock lf;
 	struct nameidata nd;
 	struct vattr vattr;
-	int error, error1, flags;
+	int error, error1, flags, locked;
 	struct mount *mp;
 	char *name;			/* name of corefile */
 	off_t limit;
@@ -2570,9 +2570,7 @@
 	lf.l_start = 0;
 	lf.l_len = 0;
 	lf.l_type = F_WRLCK;
-	error = VOP_ADVLOCK(vp, (caddr_t)p, F_SETLK, &lf, F_FLOCK);
-	if (error)
-		goto out2;
+	locked = (VOP_ADVLOCK(vp, (caddr_t)p, F_SETLK, &lf, F_FLOCK) == 0);
 
 	if (vn_start_write(vp, &mp, V_NOWAIT) != 0) {
 		lf.l_type = F_UNLCK;
@@ -2598,8 +2596,10 @@
 	  p->p_sysent->sv_coredump(td, vp, limit) :
 	  ENOSYS;
 
-	lf.l_type = F_UNLCK;
-	VOP_ADVLOCK(vp, (caddr_t)p, F_UNLCK, &lf, F_FLOCK);
+	if (locked) {
+		lf.l_type = F_UNLCK;
+		VOP_ADVLOCK(vp, (caddr_t)p, F_UNLCK, &lf, F_FLOCK);
+	}
 	vn_finished_write(mp);
 out2:
 	error1 = vn_close(vp, FWRITE, cred, td);
