Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Jul 2016 21:44:59 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r302401 - head/lib/libc/sys
Message-ID:  <201607072144.u67LixYh044085@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Thu Jul  7 21:44:59 2016
New Revision: 302401
URL: https://svnweb.freebsd.org/changeset/base/302401

Log:
  fcntl(2): Document interrupt/restart for file locks.
  
  Since r302216, thread suspension causes advisory file locks to restart
  (instead of continuing to wait) and for a long time SA_RESTART has
  affected advisory file locks. These are both not compliant to POSIX.1.
  
  To clarify that restarting means something, add a paragraph about fair
  queuing. Note that the network lock manager does not implement fair
  queuing.
  
  Reviewed by:	kib (previous version)
  Approved by:	re (gjb)

Modified:
  head/lib/libc/sys/fcntl.2

Modified: head/lib/libc/sys/fcntl.2
==============================================================================
--- head/lib/libc/sys/fcntl.2	Thu Jul  7 21:03:50 2016	(r302400)
+++ head/lib/libc/sys/fcntl.2	Thu Jul  7 21:44:59 2016	(r302401)
@@ -28,7 +28,7 @@
 .\"     @(#)fcntl.2	8.2 (Berkeley) 1/12/94
 .\" $FreeBSD$
 .\"
-.Dd February 8, 2013
+.Dd July 7, 2016
 .Dt FCNTL 2
 .Os
 .Sh NAME
@@ -363,6 +363,13 @@ request fails or blocks respectively whe
 locks on bytes in the specified region and the type of any of those
 locks conflicts with the type specified in the request.
 .Pp
+The queuing for
+.Dv F_SETLKW
+requests on local files is fair;
+that is, while the thread is blocked,
+subsequent requests conflicting with its requests will not be granted,
+even if these requests do not conflict with existing locks.
+.Pp
 This interface follows the completely stupid semantics of System V and
 .St -p1003.1-88
 that require that all locks associated with a file for a given process are
@@ -646,6 +653,20 @@ The
 .Dv F_DUP2FD
 constant is non portable.
 It is provided for compatibility with AIX and Solaris.
+.Pp
+Per
+.St -susv4 ,
+a call with
+.Dv F_SETLKW
+should fail with
+.Bq Er EINTR
+after any caught signal
+and should continue waiting during thread suspension such as a stop signal.
+However, in this implementation a call with
+.Dv F_SETLKW
+is restarted after catching a signal with a
+.Dv SA_RESTART
+handler or a thread suspension such as a stop signal.
 .Sh HISTORY
 The
 .Fn fcntl



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