Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Nov 2001 03:50:04 -0800 (PST)
From:      Maxim Konovalov <maxim@macomnet.ru>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/23353: fcntl(F_GETLK) return l_pid equal to -1 for the file loked with flock()
Message-ID:  <200111191150.fAJBo4a53978@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/23353; it has been noted by GNATS.

From: Maxim Konovalov <maxim@macomnet.ru>
To: freebsd-gnats-submit@freebsd.org
Cc:  
Subject: Re: kern/23353: fcntl(F_GETLK) return l_pid equal to -1 for the file
 loked with flock()
Date: Mon, 19 Nov 2001 14:42:57 +0300 (MSK)

 ---------- Forwarded message ----------
 Date: Mon, 19 Nov 2001 12:41:20 +0200 (EET)
 From: Andrey Simonenko <simon@simon.org.ua>
 To: Maxim Konovalov <maxim@macomnet.ru>
 Cc: iedowse@freebsd.org, freebsd-bugs@freebsd.org
 Subject: Re: kern/23353: fcntl(F_GETLK) return l_pid equal to -1 for the
     file loked with flock()
 
 
 On Mon, 19 Nov 2001, Maxim Konovalov wrote:
 
 > OK, just imagine a process got a lock by flock(2) and then fork(2)ed
 > nine children, so we have ten processes with the same lock. What do
 > you expect to find in flock.l_pid now? Imho l_pid is about clueless
 > here because of the lock inheritance.
 
 Probably l_pid should be equal to the PID of the parent and then, when
 the parent is terminated, it should be equal to one of its childs, and
 so on.
 
 >
 > Historically, flock(2) is a BSD interface and fcntl(F_???LK) is a
 > POSIX one. They can be used concurrently for locking but there is a
 > feature which I described above. Take a look at the line 517
 > kern_lockf.c (1.25):
 >
 > if (block->lf_flags & F_POSIX)
 > 	fl->l_pid = ((struct proc *)(block->lf_id))->p_pid;
 > else
 > 	fl->l_pid = -1;
 >
 
 Thanks, I understood.
 
 > > flock(2) call (at least in my experiments). Also I haven't find any
 > > information about this in manual pages.
 >
 > Agree.
 >
 > What about this patch for fcntl.2:
 >
 > Index: fcntl.2
 > ===================================================================
 > RCS file: /vol0/cvs/ncvs/src/lib/libc/sys/fcntl.2,v
 > retrieving revision 1.35
 > diff -u -r1.35 fcntl.2
 > --- fcntl.2     2001/10/26 17:38:20     1.35
 > +++ fcntl.2     2001/11/19 09:18:09
 > @@ -535,6 +535,12 @@
 >  .Xr sigvec 2 ,
 >  .Xr tcgetpgrp 3 ,
 >  .Xr tcsetpgrp 3
 > +.Sh BUGS
 > +fcntl(F_GETLK) returns -1 in
 > +.Fa l_pid
 > +if the process holding a blocking lock previously locked the
 > +file desriptor by
 > +.Xr flock 2 .
 >  .Sh HISTORY
 >  The
 >  .Fn fcntl
 >
 
 May be it will be good to put description of such behaviour of flock
 and fcntl to the manual page, not sure that it should be placed in
 the BUG section, but commiters should know where to put this sentence.
 
 In any way I agree that this PR can be closed.
 
 
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200111191150.fAJBo4a53978>