chdir 't';
unshift @INC, '../lib';
}
- use Config;
- unless ($Config{'useithreads'}) {
- print "1..0 # Skip: no useithreads\n";
- exit 0;
- }
-}
-use ExtUtils::testlib;
-
-sub ok {
- my ($id, $ok, $name) = @_;
+ require($ENV{PERL_CORE} ? "./test.pl" : "./t/test.pl");
- # You have to do it this way or VMS will get confused.
- if ($ok) {
- print("ok $id - $name\n");
- } else {
- print("not ok $id - $name\n");
- printf("# Failed test at line %d\n", (caller)[2]);
+ use Config;
+ if (! $Config{'useithreads'}) {
+ skip_all(q/Perl not compiled with 'useithreads'/);
}
- return ($ok);
+ plan(11);
}
-BEGIN { $| = 1; print "1..12\n"};
+use ExtUtils::testlib;
+
+use_ok('threads');
-use threads;
-use threads::shared;
-ok(1, 1, 'Loaded');
+### Start of Testing ###
my $i = 10;
my $y = 20000;
+
my %localtime;
-for(0..$i) {
- $localtime{$_} = localtime($_);
+for (1..$i) {
+ $localtime{$_} = localtime($_);
};
-my $mutex = 2;
-share($mutex);
-sub localtime_r {
- lock($mutex);
- my $retval = localtime(shift());
- 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);
- ok($mutex, ! $error, 'localtime safe');
- $mutex++;
- });
- push @threads, $thread;
+for (1..$i) {
+ $threads[$_] = threads->create(sub {
+ my $arg = shift;
+ my $localtime = $localtime{$arg};
+ my $error = 0;
+ for (1..$y) {
+ my $lt = localtime($arg);
+ if ($localtime ne $lt) {
+ $error++;
+ }
+ }
+ return $error;
+ }, $_);
}
-for(@threads) {
- $_->join();
+for (1..$i) {
+ is($threads[$_]->join(), 0, 'localtime() thread-safe');
}
+# EOF