This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
XS-Typemap/t/Typemap.t: avoid close warnings
authorDavid Mitchell <davem@iabyn.com>
Fri, 12 Dec 2014 19:52:53 +0000 (19:52 +0000)
committerDavid Mitchell <davem@iabyn.com>
Fri, 12 Dec 2014 19:52:53 +0000 (19:52 +0000)
This test creates some file handles and dups them using XS that
exercises the T_OUT etc typemaps. When the dup filehandle is implicitly
closed on scope exit, it warns, since the close fails:

    Warning: unable to close filehandle properly: Bad file descriptor

The close fails because the two file handles are sharing the same
underlying IoIFP/IoOFP and so the second of the two closes doesn't work.

Fix this by explicitly closing the handles.

(Note that until the previous commit that fixed a leak with these
typemaps, the warning wasn't coming  until global destruction, since the
new GV was being leaked.)

ext/XS-Typemap/t/Typemap.t

index e251c55..27b4086 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
     }
 }
 
-use Test::More tests => 148;
+use Test::More tests => 152;
 
 use strict;
 use warnings;
@@ -405,6 +405,9 @@ SCOPE: {
   seek($fh2, 0, 0);
   is(readline($fh2), $str);
   ok(print $fh2 "foo\n");
+  ok(close $fh);
+  # this fails because the underlying shared handle is already closed
+  ok(!close $fh2);
 }
 
 # T_IN
@@ -431,6 +434,9 @@ SCOPE: {
   seek($fh2, 0, 0);
   is(readline($fh2), $str);
   ok(eval {print $fh2 "foo\n"; 1});
+  ok(close $fh);
+  # this fails because the underlying shared handle is already closed
+  ok(!close $fh2);
 }
 
 sub is_approx {