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(); }