From: Rafael Garcia-Suarez Date: Mon, 21 Nov 2005 08:58:59 +0000 (+0000) Subject: Upgrade to Time::HiRes 1.83 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=a5929ff3b853e58228aef2c6033d60fcf6e179d4;p=p5sagit%2Fp5-mst-13.2.git Upgrade to Time::HiRes 1.83 p4raw-id: //depot/perl@26181 --- diff --git a/ext/Time/HiRes/Changes b/ext/Time/HiRes/Changes index a31ab07..b61607f 100644 --- a/ext/Time/HiRes/Changes +++ b/ext/Time/HiRes/Changes @@ -1,5 +1,14 @@ Revision history for Perl extension Time::HiRes. +1.83 [2005-11-19] + - has_symbol() was wrong since e.g. ITIMER_VIRTUAL is exported + via @EXPORT_OK even when it is not available. This is heinous. + @EXPORT_OK should be determined at Makefile.PL time. + - be more lenient is testing clock_gettime(): allow more slop, + and retry up to three times, sleeping a random nap between + the retries + - human months are one-based (noticed by Anton Berezin) + 1.82 [2005-10-06] - CLOCK_REALTIME is an enum value (of the clockid_t enum) in HP-UX (and might be so elsewhere, too), debugged by @@ -7,7 +16,7 @@ Revision history for Perl extension Time::HiRes. - include const-c.inc as late as possible (from Randy Kobes, [rt.cpan.org #15552] to avoid undefined usleep() on Win32 -1.81 [2005-10-05] +1.81 [2005-11-05] - try to be more robust and consistent in the detection of CLOCK_REALTIME and ITIMER_VIRTUAL in HiRes.t: the proper way is @@ -37,10 +46,10 @@ Revision history for Perl extension Time::HiRes. - fixed inside a comment HAS_POLL -> TIME_HIRES_NANOSLEEP - at the end of HiRest.t tell how close we were to termination -1.80 [2005-10-04] +1.80 [2005-11-04] - Gisle noticed a mistake (using HAS_NANOSLEEP) in 1.79 -1.79 [2005-10-03] +1.79 [2005-11-03] - try nanosleep for emulating usleep -- may help in some weird embedded realtime places which have nanosleep but neither usleep nor select nor poll (doesn't have to be weird embedded realtime @@ -49,12 +58,12 @@ Revision history for Perl extension Time::HiRes. SVR4 places that have neither usleep nor select - a redundant test guard in HiRes.t -1.78 [2005-10-03] +1.78 [2005-11-03] - ITIMER_VIRTUAL detection in HiRes.t had problems (that we cannot in the general case fail already at 'use' phase is suboptimal) - fixes to the documentation of clock_gettime() and clock_getres() -1.77 [2005-10-03] +1.77 [2005-11-03] - add support for the POSIX clock_gettime() and clock_getres(), if available, either as library calls or as syscalls - be more defensive about missing functionality: break out diff --git a/ext/Time/HiRes/HiRes.pm b/ext/Time/HiRes/HiRes.pm index ffb027f..2b4269f 100644 --- a/ext/Time/HiRes/HiRes.pm +++ b/ext/Time/HiRes/HiRes.pm @@ -17,7 +17,7 @@ require DynaLoader; d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer d_nanosleep d_clock_gettime d_clock_getres); -$VERSION = '1.82'; +$VERSION = '1.83'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; diff --git a/ext/Time/HiRes/Makefile.PL b/ext/Time/HiRes/Makefile.PL index 0105609..bce235e 100644 --- a/ext/Time/HiRes/Makefile.PL +++ b/ext/Time/HiRes/Makefile.PL @@ -324,18 +324,22 @@ sub init { $DEFINE = ''; if ($Config{d_syscall}) { - print "Have syscall(), looking for syscall.h... "; + print "Have syscall()... looking for syscall.h... "; if (has_include('syscall.h')) { $SYSCALL_H = 'syscall.h'; } elsif (has_include('sys/syscall.h')) { $SYSCALL_H = 'sys/syscall.h'; } + } else { + print "No syscall()...\n"; } - if (defined $SYSCALL_H) { - print "found <$SYSCALL_H>.\n"; - } else { - print "NOT found.\n"; + if ($Config{d_syscall}) { + if (defined $SYSCALL_H) { + print "found <$SYSCALL_H>.\n"; + } else { + print "NOT found.\n"; + } } print "Looking for gettimeofday()... "; @@ -628,6 +632,7 @@ sub main { if ($^O =~ /Win32/i) { $DEFINE = '-DSELECT_IS_BROKEN'; $LIBS = []; + print "System is $^O, skipping full configure...\n"; } else { init(); } diff --git a/ext/Time/HiRes/t/HiRes.t b/ext/Time/HiRes/t/HiRes.t index 5bee26f..ad4959e 100644 --- a/ext/Time/HiRes/t/HiRes.t +++ b/ext/Time/HiRes/t/HiRes.t @@ -33,9 +33,10 @@ my $have_clock_getres = &Time::HiRes::d_clock_getres; sub has_symbol { my $symbol = shift; - eval "import Time::HiRes qw($symbol)"; + eval "use Time::HiRes qw($symbol)"; return 0 unless $@ eq ''; - return exists &{"Time::HiRes::$symbol"}; + eval "my \$a = $symbol"; + return $@ eq ''; } printf "# have_gettimeofday = %d\n", $have_gettimeofday; @@ -496,23 +497,36 @@ if ($have_clock_gettime && # All implementations of clock_gettime() # are SUPPOSED TO support CLOCK_REALTIME. has_symbol('CLOCK_REALTIME')) { - my $t0 = clock_gettime(&CLOCK_REALTIME); - use Time::HiRes qw(sleep); - my $T = 1.5; - sleep($T); - my $t1 = clock_gettime(&CLOCK_REALTIME); - if ($t0 > 0 && $t1 > $t0) { - print "# t1 = $t1, t0 = $t0\n"; - my $dt = $t1 - $t0; - my $rt = abs(1 - $dt / $T); - if ($rt <= $limit) { - print "ok 30 # dt = $dt, r = $rt\n"; - } else { - print "not ok 30 # dt = $dt, rt = $rt\n"; + my $ok = 0; + TRY: { + for my $try (1..3) { + print "# CLOCK_REALTIME: try = $try\n"; + my $t0 = clock_gettime(&CLOCK_REALTIME); + use Time::HiRes qw(sleep); + my $T = 1.5; + sleep($T); + my $t1 = clock_gettime(&CLOCK_REALTIME); + if ($t0 > 0 && $t1 > $t0) { + print "# t1 = $t1, t0 = $t0\n"; + my $dt = $t1 - $t0; + my $rt = abs(1 - $dt / $T); + print "# dt = $dt, rt = $rt\n"; + if ($rt <= 2 * $limit) { + $ok = 1; + last TRY; + } + } else { + print "# Error: t0 = $t0, t1 = $t1\n"; + } + my $r = rand() + rand(); + printf "# Sleeping for %.6f seconds...\n"; + sleep($r); } + } + if ($ok) { + print "ok 30\n"; } else { - print "# Error: t0 = $t0, t1 = $t1\n"; - skip 30; + print "not ok 30\n"; } } else { print "# No clock_gettime\n";