This file is indexed.

/usr/share/perl5/Object/Remote/WatchDog.pm is in libobject-remote-perl 0.004000-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package Object::Remote::WatchDog;

use Object::Remote::MiniLoop;
use Object::Remote::Logging qw (:log :dlog router);
use Moo;

has timeout => ( is => 'ro', required => 1 );

BEGIN { router()->exclude_forwarding; }

sub instance {
  my ($class, @args) = @_;

  return our $WATCHDOG ||= do {
    log_trace { "Constructing new instance of global watchdog" };
    $class->new(@args);
  };
};

#start the watchdog
sub BUILD {
  my ($self) = @_;

  $SIG{ALRM} = sub {
    #if the Watchdog is killing the process we don't want any chance of the
    #process not actually exiting and die could be caught by an eval which
    #doesn't do us any good
    log_fatal { "Watchdog has expired, terminating the process" };
    exit(1);
  };

  Dlog_debug { "Initializing watchdog with timeout of $_ seconds" } $self->timeout;
  alarm($self->timeout);
}

#invoke at least once per timeout to stop
#the watchdog from killing the process
sub reset {
  die "Attempt to reset the watchdog before it was constructed"
    unless defined our $WATCHDOG;

  log_debug { "Watchdog has been reset" };
  alarm($WATCHDOG->timeout);
}

#must explicitly call this method to stop the
#watchdog from killing the process - if the
#watchdog is lost because it goes out of scope
#it makes sense to still terminate the process
sub shutdown {
  my ($self) = @_;
  log_debug { "Watchdog is shutting down" };
  alarm(0);
}

1;