1 2BEGIN { 3 chdir 't' if -d 't'; 4 push @INC, '../lib'; 5 require Config; import Config; 6 unless ($Config{'useithreads'}) { 7 print "1..0 # Skip: no useithreads\n"; 8 exit 0; 9 } 10} 11 12use ExtUtils::testlib; 13use strict; 14BEGIN { $| = 1; print "1..11\n"}; 15 16use threads; 17use threads::shared; 18my $i = 10; 19my $y = 20000; 20my %localtime; 21for(0..$i) { 22 $localtime{$_} = localtime($_); 23}; 24my $mutex = 1; 25share($mutex); 26sub localtime_r { 27# print "Waiting for lock\n"; 28 lock($mutex); 29# print "foo\n"; 30 my $retval = localtime(shift()); 31# unlock($mutex); 32 return $retval; 33} 34my @threads; 35for(0..$i) { 36 my $thread = threads->create(sub { 37 my $arg = $_; 38 my $localtime = $localtime{$arg}; 39 my $error = 0; 40 for(0..$y) { 41 my $lt = localtime($arg); 42 if($localtime ne $lt) { 43 $error++; 44 } 45 } 46 lock($mutex); 47 if($error) { 48 print "not ok $mutex # not a safe localtime\n"; 49 } else { 50 print "ok $mutex\n"; 51 } 52 $mutex++; 53 }); 54 push @threads, $thread; 55} 56 57for(@threads) { 58 $_->join(); 59} 60 61