Module Name: src
Committed By: riastradh
Date: Sat Dec 21 18:56:28 UTC 2024
Modified Files:
src/lib/libc/sys: close.2
Log Message:
close(2): Document the finality of closing.
Even if close(2) returns -1 on error, the descriptor is closed (or
was already closed).
POSIX doesn't specify this, but that's a bug in POSIX (probably to
accommodate some buggy ancient proprietary Unix). Every free
software OS kernel I checked works the same way and it is important
to be able to reliably close descriptors with finality.
To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/lib/libc/sys/close.2
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/sys/close.2
diff -u src/lib/libc/sys/close.2:1.18 src/lib/libc/sys/close.2:1.19
--- src/lib/libc/sys/close.2:1.18 Sun Sep 1 19:20:45 2019
+++ src/lib/libc/sys/close.2 Sat Dec 21 18:56:28 2024
@@ -1,4 +1,4 @@
-.\" $NetBSD: close.2,v 1.18 2019/09/01 19:20:45 sevan Exp $
+.\" $NetBSD: close.2,v 1.19 2024/12/21 18:56:28 riastradh Exp $
.\"
.\" Copyright (c) 1980, 1991, 1993, 1994
.\" The Regents of the University of California. All rights reserved.
@@ -106,6 +106,24 @@ Upon successful completion, a value of 0
Otherwise, a value of \-1 is returned and
.Va errno
is set to indicate the error.
+.Pp
+In either case, if
+.Fa d
+was an active descriptor, it is no longer active.
+That is,
+.Fn close
+always closes the file descriptor, and, if it was the last reference to
+the underlying object, frees the associated resources \(em even if some
+underlying I/O fails or it is interrupted by a signal.
+.Pp
+Callers must not retry failed
+.Fn close ,
+even on
+.Er EINTR .
+Retrying may inadvertently close a descriptor that was created by
+another thread concurrently after the first call to
+.Fn close
+failed.
.Sh ERRORS
.Fn close
will fail if:
@@ -130,6 +148,14 @@ The
.Fn close
function conforms to
.St -p1003.1-90 .
+.Pp
+The finality of
+.Fn close ,
+even on error, is not specified by POSIX, but most operating systems,
+including
+.Fx ,
+.Ox ,
+Linux, and Solaris, implement the same semantics.
.Sh HISTORY
The
.Fn close