summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorArtur Bergman <sky@nanisky.com>2002-02-08 15:19:15 +0000
committerArtur Bergman <sky@nanisky.com>2002-02-08 15:19:15 +0000
commit83007387b1112d8c8e858eb2722e3e518f1d9896 (patch)
treea8e2769cbafee0d338d2bd1f72d3176218da9865 /ext
parented2c6b9b45ca155543a6a8e651e2d3e0d446406e (diff)
downloadperl-83007387b1112d8c8e858eb2722e3e518f1d9896.tar.gz
Start testing for safe localtime functions, TODO, test more functions.
p4raw-id: //depot/perl@14602
Diffstat (limited to 'ext')
-rw-r--r--ext/threads/t/libc.t60
1 files changed, 60 insertions, 0 deletions
diff --git a/ext/threads/t/libc.t b/ext/threads/t/libc.t
new file mode 100644
index 0000000000..409945ad54
--- /dev/null
+++ b/ext/threads/t/libc.t
@@ -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();
+}
+