Start testing for safe localtime functions, TODO, test more functions.
authorArtur Bergman <sky@nanisky.com>
Fri, 8 Feb 2002 15:19:15 +0000 (15:19 +0000)
committerArtur Bergman <sky@nanisky.com>
Fri, 8 Feb 2002 15:19:15 +0000 (15:19 +0000)
p4raw-id: //depot/perl@14602

MANIFEST
ext/threads/t/libc.t [new file with mode: 0644]

index 6f783cc..8df8c2c 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -629,6 +629,7 @@ ext/threads/shared/t/sv_refs.t      thread shared variables
 ext/threads/shared/t/sv_simple.t       thread shared variables
 ext/threads/shared/typemap     thread::shared types
 ext/threads/t/basic.t          ithreads
+ext/threads/t/libc.t            testing libc functions for threadsafetyness
 ext/threads/t/stress_cv.t      Test with multiple threads, coderef cv argument.
 ext/threads/t/stress_re.t      Test with multiple threads, string cv argument and regexes.
 ext/threads/t/stress_string.t  Test with multiple threads, string cv argument.
diff --git a/ext/threads/t/libc.t b/ext/threads/t/libc.t
new file mode 100644 (file)
index 0000000..409945a
--- /dev/null
@@ -0,0 +1,60 @@
+
+BEGIN {
+    chdir 't' if -d 't';
+    @INC = '../lib';
+    require Config; import Config;
+    unless ($Config{'useithreads'}) {
+        print "1..0 # Skip: no useithreads\n";
+        exit 0;
+    }
+}
+
+use ExtUtils::testlib;
+use strict;
+BEGIN { $| = 1; print "1..11\n"};
+
+use threads;
+use threads::shared;
+my $i = 10;
+my $y = 20000;
+my %localtime;
+for(0..$i) {
+       $localtime{$_} = localtime($_);
+};
+my $mutex = 1;
+share($mutex);
+sub localtime_r {
+#  print "Waiting for lock\n";
+  lock($mutex);
+#  print "foo\n";
+  my $retval = localtime(shift());
+#  unlock($mutex);
+  return $retval;
+}
+my @threads;
+for(0..$i) {
+  my $thread = threads->create(sub {
+                                my $arg = $_;
+                   my $localtime = $localtime{$arg};
+                   my $error = 0;
+                   for(0..$y) {
+                     my $lt = localtime($arg);
+                     if($localtime ne $lt) {
+                       $error++;
+                     } 
+                   }
+                                lock($mutex);
+                                if($error) {
+                                  print "not ok $mutex # not a safe localtime\n";
+                                } else {
+                                  print "ok $mutex\n";
+                                }
+                                $mutex++;
+                 });   
+  push @threads, $thread;
+}
+
+for(@threads) {
+  $_->join();
+}
+