1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-16 01:22:18 +03:00
Commit Graph

6 Commits

Author SHA1 Message Date
Bruno Haible
4e39aa4288 doc: Update regarding MSVC 9.
* doc/gnulib-intro.texi (Target Platforms): Classify MSVC as "rarely
tested".
* doc/posix-functions/*.texi: Update with info about MSVC 9.
* doc/posix-headers/*.texi: Likewise.
* doc/pastposix-functions/*.texi: Likewise.
* doc/glibc-functions/*.texi: Likewise.
* doc/glibc-headers/*.texi: Likewise.
2011-09-11 21:56:17 +02:00
Eric Blake
3dbe75e4eb 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>
2011-06-29 16:04:56 -06:00
Eric Blake
e2f1471b02 pipe-posix: new module
* modules/pipe-posix: New file.
* m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Set default.
(gl_UNISTD_H): Check for declaration.
* modules/unistd (Makefile.am): Substitute it.
* lib/unistd.in.h (pipe): Provide it for mingw.
* doc/posix-functions/pipe.texi (pipe): Update documentation.
* MODULES.html.sh (File descriptor based Input/Output): Likewise.

Signed-off-by: Eric Blake <eblake@redhat.com>
2010-12-10 15:42:08 -07:00
Karl Berry
80fc442c21 avoid some overlong lines from posix urls, etc. 2010-08-13 11:50:58 -07:00
Bruno Haible
09ef746111 Refer to new POSIX:2008 standard. 2008-12-14 14:38:13 +01:00
Bruno Haible
2b6c08c775 Rename two directories: headers -> posix-headers, functions -> posix-functions. 2008-01-20 00:09:59 +01:00