refactor watchdog code a bit
Matt S Trout [Tue, 19 Mar 2013 19:55:49 +0000 (19:55 +0000)]
lib/Object/Remote/Node.pm
lib/Object/Remote/WatchDog.pm

index dd7b85f..a3f88a5 100644 (file)
@@ -30,7 +30,7 @@ sub run {
   #a command that clears the alarm in all instances - even
   #if the Object::Remote::Watchdog is not being used
   if ($args{watchdog_timeout}) {
-    Object::Remote::WatchDog->new(timeout => $args{watchdog_timeout});
+    Object::Remote::WatchDog->instance(timeout => $args{watchdog_timeout});
   } else {
     #reset connection watchdog from the fatnode
     alarm(0);
index 3b80f85..bbcd188 100644 (file)
@@ -8,13 +8,13 @@ has timeout => ( is => 'ro', required => 1 );
 
 BEGIN { router()->exclude_forwarding; }
 
-around new => sub {
-  my ($orig, $self, @args) = @_;
-  our ($WATCHDOG);
+sub instance {
+  my ($class, @args) = @_;
 
-  return $WATCHDOG if defined $WATCHDOG;
-  log_trace { "Constructing new instance of global watchdog" };
-  return $WATCHDOG = $self->$orig(@args);
+  return our $WATCHDOG ||= do {
+    log_trace { "Constructing new instance of global watchdog" };
+    $class->new(@args);
+  };
 };
 
 #start the watchdog
@@ -36,9 +36,8 @@ sub BUILD {
 #invoke at least once per timeout to stop
 #the watchdog from killing the process
 sub reset {
-  our ($WATCHDOG);
   die "Attempt to reset the watchdog before it was constructed"
-    unless defined $WATCHDOG;
+    unless defined our $WATCHDOG;
 
   log_debug { "Watchdog has been reset" };
   alarm($WATCHDOG->timeout);