Mercurial > hg > octave-nkf > gnulib-hg
annotate doc/posix-functions/iswgraph_l.texi @ 15326:52719068f9c2
pipe, pipe2: don't corrupt fd on error
I noticed a potential subtle double-close bug in libvirt. There,
a common idiom is to initialize an int fd[2]={-1,-1}, then have
multiple error paths goto common cleanup code. In the cleanup
code, the fds are closed if they are not already -1; this works
if the error label is reached before the pipe call, or after
pipe succeeds, but if it was the pipe call itself that jumped
to the error label, then it is relying on failed pipe() not
altering the values already in fd array prior to the failure.
Our pipe2 replacement violated this assumption, and could leave
a non-negative value in the array, which in turn would let
libvirt close an already-closed fd, possibly nuking an unrelated
fd opened by another thread that happened to get the same value.
As a result, I raised a POSIX issue regarding the behavior of
pipe on failure: http://austingroupbugs.net/view.php?id=467
Using that test program, I learned that most systems leave fd
unchanged on error, but that mingw always assigns -1 into the
array. This fixes the mingw pipe() replacement, as well as
the gnulib pipe2() replacement.
I don't know of any race-free way to work around a cygwin crash:
http://cygwin.com/ml/cygwin/2011-06/msg00328.html - we could
always open() and then close() two fds to guess whether two
spare fd still remain before calling pipe(), but that is racy.
* lib/pipe.c (pipe): Leave fd unchanged on error.
* lib/pipe2.c (pipe2): Likewise.
* doc/posix-functions/pipe.texi (pipe): Document cygwin issue.
* doc/glibc-functions/pipe2.texi (pipe2): Likewise.
Signed-off-by: Eric Blake <eblake@redhat.com>
author | Eric Blake <eblake@redhat.com> |
---|---|
date | Wed, 29 Jun 2011 15:46:50 -0600 |
parents | 3bbfc7e37ec2 |
children | 847372253549 |
rev | line source |
---|---|
10879
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
1 @node iswgraph_l |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
2 @section @code{iswgraph_l} |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
3 @findex iswgraph_l |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
4 |
13549
bb0ceefd22dc
avoid some overlong lines from posix urls, etc.
Karl Berry <karl@freefriends.org>
parents:
12348
diff
changeset
|
5 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/iswgraph_l.html} |
10879
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
6 |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
7 Gnulib module: --- |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
8 |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
9 Portability problems fixed by Gnulib: |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
10 @itemize |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
11 @end itemize |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
12 |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
13 Portability problems not fixed by Gnulib: |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
14 @itemize |
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
15 @item |
12348
8877edbaae37
doc: Most *_l functions exist in MacOS X 10.5.
Bruno Haible <bruno@clisp.org>
parents:
10961
diff
changeset
|
16 This function is missing on many platforms: |
13917
3bbfc7e37ec2
Update for Solaris 11 2010-11.
Bruno Haible <bruno@clisp.org>
parents:
13892
diff
changeset
|
17 MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, Interix 3.5, BeOS. |
10961
5c9ddf458ac4
Mention platform-dependent limitations of wchar_t.
Bruno Haible <bruno@clisp.org>
parents:
10879
diff
changeset
|
18 @item |
5c9ddf458ac4
Mention platform-dependent limitations of wchar_t.
Bruno Haible <bruno@clisp.org>
parents:
10879
diff
changeset
|
19 On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot |
5c9ddf458ac4
Mention platform-dependent limitations of wchar_t.
Bruno Haible <bruno@clisp.org>
parents:
10879
diff
changeset
|
20 accommodate all Unicode characters. |
10879
fb8d0f8624e2
Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff
changeset
|
21 @end itemize |