]> Sergey Matveev's repositories - public-inbox.git/commitdiff
ds: use and export monotonic now()
authorEric Wong <e@80x24.org>
Mon, 24 Jun 2019 02:52:04 +0000 (02:52 +0000)
committerEric Wong <e@80x24.org>
Mon, 24 Jun 2019 05:26:25 +0000 (05:26 +0000)
All of our internal timing code should use monotonic clocks
for consistency against system clock adjustments.

This can be shared by our Daemon and NNTP packages.

lib/PublicInbox/DS.pm
lib/PublicInbox/Daemon.pm
lib/PublicInbox/NNTP.pm

index 9e24ed78d10f2ab9891340b8df5fb78d4827c95a..e7db2034c868a78a64bbaf18d3f23e25a9f0040b 100644 (file)
@@ -17,10 +17,11 @@ package PublicInbox::DS;
 use strict;
 use bytes;
 use POSIX ();
-use Time::HiRes ();
 use IO::Handle qw();
 use Fcntl qw(FD_CLOEXEC F_SETFD F_GETFD);
-
+use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
+use parent qw(Exporter);
+our @EXPORT_OK = qw(now);
 use warnings;
 
 use PublicInbox::Syscall qw(:epoll);
@@ -115,7 +116,7 @@ sub AddTimer {
     my $class = shift;
     my ($secs, $coderef) = @_;
 
-    my $fire_time = Time::HiRes::time() + $secs;
+    my $fire_time = now() + $secs;
 
     my $timer = bless [$fire_time, $coderef], "PublicInbox::DS::Timer";
 
@@ -195,11 +196,13 @@ sub FirstTimeEventLoop {
     }
 }
 
+sub now () { clock_gettime(CLOCK_MONOTONIC) }
+
 # runs timers and returns milliseconds for next one, or next event loop
 sub RunTimers {
     return $LoopTimeout unless @Timers;
 
-    my $now = Time::HiRes::time();
+    my $now = now();
 
     # Run expired timers
     while (@Timers && $Timers[0][0] <= $now) {
index 227ba5f979d09ef23eebaf892284b27137222165..b8d6b572e3c02b926d643167f34dfa6312c203b7 100644 (file)
@@ -9,10 +9,9 @@ use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/;
 use IO::Handle;
 use IO::Socket;
 use Cwd qw/abs_path/;
-use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
 STDOUT->autoflush(1);
 STDERR->autoflush(1);
-require PublicInbox::DS;
+use PublicInbox::DS qw(now);
 require PublicInbox::EvCleanup;
 require POSIX;
 require PublicInbox::Listener;
@@ -183,7 +182,7 @@ sub worker_quit {
        PublicInbox::DS->SetPostLoopCallback(sub {
                my ($dmap, undef) = @_;
                my $n = 0;
-               my $now = clock_gettime(CLOCK_MONOTONIC);
+               my $now = now();
 
                foreach my $s (values %$dmap) {
                        $s->can('busy') or next;
@@ -195,9 +194,9 @@ sub worker_quit {
                        }
                }
                if ($n) {
-                       if (($warn + 5) < time) {
+                       if (($warn + 5) < now()) {
                                warn "$$ quitting, $n client(s) left\n";
-                               $warn = time;
+                               $warn = now();
                        }
                        unless (defined $proc_name) {
                                $proc_name = (split(/\s+/, $0))[0];
index 107cbe31c2ab0a3a1952d0d8f4d988b4793f4e75..0a473e42729707058abc6e676eff5e56278024b3 100644 (file)
@@ -14,7 +14,7 @@ use PublicInbox::Git;
 require PublicInbox::EvCleanup;
 use Email::Simple;
 use POSIX qw(strftime);
-use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
+PublicInbox::DS->import('now');
 use Digest::SHA qw(sha1_hex);
 use Time::Local qw(timegm timelocal);
 use constant {
@@ -25,8 +25,6 @@ use constant {
        r430 => '430 No article with that message-id',
 };
 
-sub now () { clock_gettime(CLOCK_MONOTONIC) };
-
 my @OVERVIEW = qw(Subject From Date Message-ID References Xref);
 my $OVERVIEW_FMT = join(":\r\n", @OVERVIEW, qw(Bytes Lines)) . ":\r\n";
 my $LIST_HEADERS = join("\r\n", @OVERVIEW,