]> git.vpit.fr Git - perl/modules/VPIT-TestHelpers.git/commitdiff
Make the threads feature evaluate the thread safe var in another process
authorVincent Pit <vince@profvince.com>
Tue, 14 Apr 2015 16:01:47 +0000 (13:01 -0300)
committerVincent Pit <vince@profvince.com>
Tue, 14 Apr 2015 16:02:10 +0000 (13:02 -0300)
POSIX is required.

lib/VPIT/TestHelpers.pm
t/41-threads-unsafe.t
t/43-threads-unsafe-forced.t

index 0f37b40b6e3026eda9cb99dfb747276a4080aa71..d2484c647322a536947f666e3ebccbd45f0c4503 100644 (file)
@@ -525,7 +525,7 @@ sub capture_perl_failed_msg {
 Import :
 
     use VPIT::TestHelpers threads => [
-     $pkg, $is_threadsafe, $force_var
+     $pkg, $threadsafe_var, $force_var
     ];
 
 where :
@@ -534,11 +534,11 @@ where :
 
 =item -
 
-C<$pkg> is the target package name to be used in error messages (defaults to C<'package'>) ;
+C<$pkg> is the target package name that will be exercised by this test ;
 
 =item -
 
-C<$is_threadsafe> is a boolean telling whether the target module is thread-safe (not tested if C<undef>) ;
+C<$threadsafe_var> is the name of an optional variable in C<$pkg> that evaluates to true if and only if the module claims to be thread safe (not checked if either C<$threadsafe_var> or C<$pkg> is C<undef>) ;
 
 =item -
 
@@ -558,6 +558,10 @@ C<perl> 5.13.4
 
 =item -
 
+L<POSIX>
+
+=item -
+
 L<threads> 1.67
 
 =item -
@@ -587,13 +591,29 @@ C<spawn $coderef>
 =cut
 
 sub init_threads {
- my ($pkg, $threadsafe, $force_var) = @_;
+ my ($pkg, $threadsafe_var, $force_var) = @_;
 
  skip_all 'This perl wasn\'t built to support threads'
                                             unless $Config::Config{useithreads};
 
- $pkg = 'package' unless defined $pkg;
- skip_all "This $pkg isn't thread safe" if defined $threadsafe and !$threadsafe;
+ if (defined $pkg and defined $threadsafe_var) {
+  my $threadsafe;
+  my $stat = run_perl("require POSIX; require $pkg; exit($threadsafe_var ? POSIX::EXIT_SUCCESS() : POSIX::EXIT_FAILURE())");
+  if (defined $stat) {
+   require POSIX;
+   my $res  = $stat >> 8;
+   if ($res == POSIX::EXIT_SUCCESS()) {
+    $threadsafe = 1;
+   } elsif ($res == POSIX::EXIT_FAILURE()) {
+    $threadsafe = !1;
+   }
+  }
+  if (not defined $threadsafe) {
+   skip_all "Could not detect if $pkg is thread safe or not";
+  } elsif (not $threadsafe) {
+   skip_all "This $pkg is not thread safe";
+  }
+ }
 
  $force_var = 'PERL_FORCE_TEST_THREADS' unless defined $force_var;
  my $force  = $ENV{$force_var} ? 1 : !1;
index 79c14ff89d81b91fed76aba8c4e7ef2092f4a2cb..fc828549b2ddae1ab190470b909de860a2406202 100644 (file)
@@ -1,4 +1,4 @@
-#!perl -T
+#!perl
 
 use strict;
 use warnings;
index ae05c60bb7ee382adf7f5a54234bb2f53210cdbf..48637f4a2e64269d9cb9459d9182bb06b81d24bf 100644 (file)
@@ -1,4 +1,4 @@
-#!perl -T
+#!perl
 
 use strict;
 use warnings;