This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Avoid loading .bs files twice when using XSLoader
authorDagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Mon, 23 Oct 2017 17:33:11 +0000 (18:33 +0100)
committerDagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Mon, 23 Oct 2017 17:38:35 +0000 (18:38 +0100)
When a .bs file is found, XSLoader::load() falls back to
DynalLoader::bootstrap() which will load it, so there's no need to do
it twice.

dist/XSLoader/XSLoader_pm.PL
ext/XS-APItest/APItest_BS
ext/XS-APItest/t/bootstrap.t

index 8012e35..41179b2 100644 (file)
@@ -11,7 +11,7 @@ print OUT <<'EOT';
 
 package XSLoader;
 
-$VERSION = "0.27";
+$VERSION = "0.28";
 
 #use strict;
 
@@ -145,8 +145,7 @@ print OUT <<'EOT';
 
     if (-s $bs) { # only read file if it's not empty
 #       print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
-        eval { local @INC = ('.'); do $bs; };
-        warn "$bs: $@\n" if $@;
+        # This calls DynaLoader::bootstrap, which loads the .bs file
        goto \&XSLoader::bootstrap_inherit;
     }
 
index 270dc9c..d9ec22f 100644 (file)
@@ -1,7 +1,7 @@
 #
-# test that non-empty .bs files get executed
+# test that non-empty .bs files get executed (but only once)
 
 $bscode = <<'EOF';
-$::bs_file_got_executed = 1;
+$::bs_file_got_executed++;
 EOF
 
index 6992b10..2c6c034 100644 (file)
@@ -11,7 +11,7 @@ use strict;
 use Test::More;
 use XS::APItest;
 
-is $::bs_file_got_executed, 1, "BS file was executed";
+is $::bs_file_got_executed, 1, "BS file was executed once";
 
 done_testing();