fix DXCron, lockout and close_gracefully
[spider.git] / perl / Timer.pm
index 98132dec6578345a4b955b02af7eae67e5296377..e0f760b857a576708c60a01d9fe74a6a58b0a73f 100644 (file)
@@ -3,35 +3,31 @@
 #
 # This uses callbacks. BE CAREFUL!!!!
 #
-# $Id$
+#
 #
 # Copyright (c) 2001 Dirk Koopman G1TLH
 #
 
 package Timer;
 
-use vars qw(@timerchain $notimers);
+use vars qw(@timerchain $notimers $lasttime);
 use DXDebug;
 
 @timerchain = ();
 $notimers = 0;
 
-use vars qw($VERSION $BRANCH);
-$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
-$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0;
-$main::build += $VERSION;
-$main::branch += $BRANCH;
+$lasttime = 0;
 
 sub new
 {
     my ($pkg, $time, $proc, $recur) = @_;
        my $obj = ref($pkg);
        my $class = $obj || $pkg;
-       my $self = bless { t=>$time + time, proc=>$proc }, $class;
+       my $self = bless { t=>$time + $main::systime, proc=>$proc }, $class;
        $self->{interval} = $time if $recur;
        push @timerchain, $self;
-       $notimers++;
-       dbg("Timer created ($notimers)") if isdbg('connll');
+       $notimers = @timerchain;
+       dbg("Timer created (notimers: $notimers)") if isdbg('connll');
        return $self;
 }
 
@@ -40,12 +36,16 @@ sub del
        my $self = shift;
        delete $self->{proc};
        @timerchain = grep {$_ != $self} @timerchain;
+       $notimers = @timerchain;
+       dbg("Timer deleted (notimers: $notimers)") if isdbg('connll');
 }
 
 sub handler
 {
-       my $now = time;
-       
+       my $now = $main::systime;
+
+       return unless $now != $lasttime;
+
        # handle things on the timer chain
        my $t;
        foreach $t (@timerchain) {
@@ -54,11 +54,12 @@ sub handler
                        $t->{t} = $now + $t->{interval} if exists $t->{interval};
                }
        }
+
+       $lasttime = $now;
 }
 
 sub DESTROY
 {
        dbg("timer destroyed ($Timer::notimers)") if isdbg('connll');
-       $Timer::notimers--;
 }
 1;