Date: Fri, 5 Mar 1999 17:48:28 +0100 (CET) From: tobez@plab.ku.dk To: FreeBSD-gnats-submit@freebsd.org Subject: kern/10402: times(3) non-decreaseness broken in 4.0 Message-ID: <199903051648.RAA23394@lion.plab.ku.dk>
next in thread | raw e-mail | index | archive | help
>Number: 10402
>Category: kern
>Synopsis: times(3) non-decreaseness broken in 4.0
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Mar 5 08:50:01 PST 1999
>Closed-Date:
>Last-Modified:
>Originator: Anton Berezin
>Release: FreeBSD 4.0-CURRENT i386
>Organization:
The Protein Laboratory, University of Copenhagen
>Environment:
FreeBSD lion.plab.ku.dk 4.0-CURRENT FreeBSD 4.0-CURRENT #12: Fri Mar 5 13:02:17 CET 1999 root@lion.plab.ku.dk:/usr/src/sys/compile/LION i386
Different Perls:
perl5.005_02 - standard perl
perl5.005_03-MAINT_TRIAL_6
perl5.005_56
>Description:
(I think the correct category is kern; I might be wrong)
When testing recent versions of Perl on also-recent 4.0-current, a
strange test failure consistently occurs. I dug this a little bit,
and it turned out that sometimes the second (or n-th) call to times(3)
can return a value of tms_stime less than that of the first call.
Perl's times() directly translates into a call to times(3) plus
divisions to get values in seconds.
Running a test script below (in How-To-Repeat section) sufficient
number of times, I've got (among the other values)
0 0.0078125
0 0 (i = 100000, beg = 920651342, time = 920651344)
----------------
and
0 0.0078125
0.0078125 0 (i = 100000, beg = 920651344, time = 920651347)
----------------
which clearly shows that system time can actually decrease.
>How-To-Repeat:
Create a perl script
----------------------8<---------------------8<---------------
#! /usr/bin/perl
($beguser,$begsys) = times;
$beg = time;
for ($i = 0; $i < 100000; $i++) {
($nowuser, $nowsys) = times;
$i = 200000 if $nowuser > $beguser && ( $nowsys > $begsys ||
(!$nowsys && !$begsys));
last if time - $beg > 20;
}
my $ttt = time;
if ($i < 200000) {
print "$beguser $begsys\n";
print "$nowuser $nowsys (i = $i, beg = $beg, time = $ttt)\n";
print "----------------\n";
}
----------------------8<---------------------8<---------------
and run it several times, better in a shell loop.
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199903051648.RAA23394>
