summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/PerlIO/t/ioleaks.t17
-rw-r--r--perlio.c17
2 files changed, 13 insertions, 21 deletions
diff --git a/ext/PerlIO/t/ioleaks.t b/ext/PerlIO/t/ioleaks.t
index 54b0ee1fab..ad76c39e9e 100644
--- a/ext/PerlIO/t/ioleaks.t
+++ b/ext/PerlIO/t/ioleaks.t
@@ -10,14 +10,17 @@ use Test::More 'no_plan';
# :perlio -> ok
# :crlf -> ok
-foreach my $layer(qw(:unix :stdio :perlio :crlf)){
- my $base_fd = do{ open my $in, '<', $0 or die $!; fileno $in };
+TODO: {
+ local $TODO = "[perl #56644] PerlIO resource leaks on open() and then :pop in :unix and :stdio";
+ foreach my $layer(qw(:unix :stdio :perlio :crlf)){
+ my $base_fd = do{ open my $in, '<', $0 or die $!; fileno $in };
- for(1 .. 3){
- open my $fh, "<$layer", $0 or die $!;
+ for(1 .. 3){
+ open my $fh, "<$layer", $0 or die $!;
- is fileno($fh), $base_fd, $layer;
- binmode $fh, ':pop';
- }
+ is fileno($fh), $base_fd, $layer;
+ binmode $fh, ':pop';
+ }
+ }
}
diff --git a/perlio.c b/perlio.c
index 436bb85a68..a3ea344620 100644
--- a/perlio.c
+++ b/perlio.c
@@ -2736,14 +2736,9 @@ PerlIOUnix_tell(pTHX_ PerlIO *f)
return PerlLIO_lseek(PerlIOSelf(f, PerlIOUnix)->fd, 0, SEEK_CUR);
}
-IV
-PerlIOUnix_close(pTHX_ PerlIO *f)
-{
- return PerlIOBase_noop_ok(aTHX_ f);
-}
IV
-PerlIOUnix_popped(pTHX_ PerlIO *f)
+PerlIOUnix_close(pTHX_ PerlIO *f)
{
dVAR;
const int fd = PerlIOSelf(f, PerlIOUnix)->fd;
@@ -2777,7 +2772,7 @@ PERLIO_FUNCS_DECL(PerlIO_unix) = {
sizeof(PerlIOUnix),
PERLIO_K_RAW,
PerlIOUnix_pushed,
- PerlIOUnix_popped,
+ PerlIOBase_popped,
PerlIOUnix_open,
PerlIOBase_binmode, /* binmode */
NULL,
@@ -3127,12 +3122,6 @@ PerlIOStdio_invalidate_fileno(pTHX_ FILE *f)
IV
PerlIOStdio_close(pTHX_ PerlIO *f)
{
- return PerlIOBase_noop_ok(aTHX_ f);
-}
-
-IV
-PerlIOStdio_popped(pTHX_ PerlIO *f)
-{
FILE * const stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
if (!stdio) {
errno = EBADF;
@@ -3569,7 +3558,7 @@ PERLIO_FUNCS_DECL(PerlIO_stdio) = {
sizeof(PerlIOStdio),
PERLIO_K_BUFFERED|PERLIO_K_RAW,
PerlIOStdio_pushed,
- PerlIOStdio_popped,
+ PerlIOBase_popped,
PerlIOStdio_open,
PerlIOBase_binmode, /* binmode */
NULL,