Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 May 2004 09:28:07 -0700
From:      Kirk McKusick <mckusick@mckusick.com>
To:        Yar Tikhiy <yar@comp.chem.msu.su>
Cc:        arch@freebsd.org
Subject:   Re: Interoperation of flock(2), fcntl(2), and lockf(3) 
Message-ID:  <200405151628.i4FGS7U9092172@beastie.mckusick.com>
In-Reply-To: Your message of "Sat, 15 May 2004 13:21:14 %2B0400." <20040515092114.GB67531@comp.chem.msu.su> 

next in thread | previous in thread | raw e-mail | index | archive | help
As the author of the original sentence, I concur that your proposed
change is an improvement. I suggest that you make it.

	Kirk McKusick

=-=-=-=-=-=

Date: Sat, 15 May 2004 13:21:14 +0400
From: Yar Tikhiy <yar@comp.chem.msu.su>
To: arch@freebsd.org, hackers@freebsd.org
Subject: Interoperation of flock(2), fcntl(2), and lockf(3)

Hi folks,

I've always been confused by the following sentence from the lockf(3)
manpage:

	The lockf(), fcntl(2) and flock(2) locks may be safely used
	concurrently.

Does that mean that each of those calls uses a locking mechanism
of its own?  Of course, in practice those calls use a mutual
mechanism, thus allowing serial access to a file from applications
using different calls.  However, there's an oddity:  While it's
possible for a process to obtain the same lock several times w/o
error (it's a no-op case of upgrading the lock,) intermixing flock(2)
and fcntl(2), or flock(2) and lockf(3), within the same process
results in EAGAIN upon the second locking attempt.  That's while
mixing fcntl(2) and lockf(3) is all right as long as the latter
call is just a wrapper for the former one.  Of course, intermixing
different lock calls within one process is a poor idea at the first
place, but I can imagine some mail application that tries to coax
all the mailbox locking schemes at once.

Considering all the above, I'd like to add the following paragraph
to the flock(2), lockf(3), and fcntl(2) man pages (replacing the
sentence quoted from lockf(3)):

	The flock(2), fcntl(2), and lockf(3) locks are compatible.
	Processes using different locking interfaces can cooperate
	over the same file safely.  However, only one of such
	interfaces should be used within a process.  If a file is
	locked by a process through flock(2), any record within the
	file will be seen as locked from the viewpoint of another
	process using fcntl(2) or lockf(3), and vice versa.

Any objections or comments?

-- 
Yar
_______________________________________________
freebsd-arch@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-arch
To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"



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