svn commit: r269624 - stable/10/lib/libc/stdio
Andrey A. Chernov
ache at FreeBSD.org
Wed Aug 6 10:38:07 UTC 2014
Author: ache
Date: Wed Aug 6 10:38:06 2014
New Revision: 269624
URL: http://svnweb.freebsd.org/changeset/base/269624
Log:
MFC: r269116
In the "Too many open files" edge cases don't try to preserve old
number for non-std* descriptors, but close old file and retry.
Obtained from: inspired by Apple's change from pfg@
Modified:
stable/10/lib/libc/stdio/freopen.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/lib/libc/stdio/freopen.c
==============================================================================
--- stable/10/lib/libc/stdio/freopen.c Wed Aug 6 10:33:43 2014 (r269623)
+++ stable/10/lib/libc/stdio/freopen.c Wed Aug 6 10:38:06 2014 (r269624)
@@ -150,6 +150,14 @@ freopen(const char * __restrict file, co
/* Get a new descriptor to refer to the new file. */
f = _open(file, oflags, DEFFILEMODE);
+ /* If out of fd's close the old one and try again. */
+ if (f < 0 && isopen && wantfd > STDERR_FILENO &&
+ (errno == ENFILE || errno == EMFILE)) {
+ (void) (*fp->_close)(fp->_cookie);
+ isopen = 0;
+ wantfd = -1;
+ f = _open(file, oflags, DEFFILEMODE);
+ }
sverrno = errno;
finish:
More information about the svn-src-stable
mailing list