Change 34601 by [EMAIL PROTECTED] on 2008/10/27 08:28:31
Integrate:
[ 34595]
USE_FAST_STDIO can affect behaviour, so list it in -V
[ 34596]
Cope with brain damage in PerlIO::via, which will let you fclose() the
same FILE * twice, thanks to it calling out to Perl space inside the
close call tree, with the underlying PerlIO * already closed, but not
unlinked.
Affected files ...
... //depot/maint-5.10/perl/perl.c#20 integrate
... //depot/maint-5.10/perl/perlio.c#10 integrate
Differences ...
==== //depot/maint-5.10/perl/perl.c#20 (text) ====
Index: perl/perl.c
--- perl/perl.c#19~34592~ 2008-10-25 08:39:32.000000000 -0700
+++ perl/perl.c 2008-10-27 01:28:31.000000000 -0700
@@ -1878,6 +1878,9 @@
# ifdef USE_SITECUSTOMIZE
" USE_SITECUSTOMIZE"
# endif
+# ifdef USE_FAST_STDIO
+ " USE_FAST_STDIO"
+# endif
, 0);
sv_catpv(opts_prog, PL_bincompat_options);
==== //depot/maint-5.10/perl/perlio.c#10 (text) ====
Index: perl/perlio.c
--- perl/perlio.c#9~34599~ 2008-10-26 14:44:48.000000000 -0700
+++ perl/perlio.c 2008-10-27 01:28:31.000000000 -0700
@@ -3133,8 +3133,15 @@
if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (void *) &optval, &optlen) == 0)
invalidate = 1;
#endif
- if (PerlIOUnix_refcnt_dec(fd) > 0) /* File descriptor still in use */
+ /* Test for -1, as *BSD stdio (at least) on fclose sets the FILE* such
+ that a subsequent fileno() on it returns -1. Don't want to croak()
+ from within PerlIOUnix_refcnt_dec() if some buggy caller code is
+ trying to close an already closed handle which somehow it still has
+ a reference to. (via.xs, I'm looking at you). */
+ if (fd != -1 && PerlIOUnix_refcnt_dec(fd) > 0) {
+ /* File descriptor still in use */
invalidate = 1;
+ }
if (invalidate) {
/* For STD* handles, don't close stdio, since we shared the FILE *,
too. */
if (stdio == stdin) /* Some stdios are buggy fflush-ing inputs */
End of Patch.