2 # Copyright (C) 2016-2020 all contributors <meta@public-inbox.org>
3 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
6 use PublicInbox::Watch;
7 use PublicInbox::Config;
9 use PublicInbox::Sigfd;
10 use PublicInbox::Syscall qw($SFD_NONBLOCK);
11 my $oldset = PublicInbox::Sigfd::block_signals();
14 local $0 = $0; # local since this script may be eval-ed
15 my $watch = PublicInbox::Watch->new(PublicInbox::Config->new);
17 my $prev = $watch or return; # SIGQUIT issued
19 $watch = PublicInbox::Watch->new(PublicInbox::Config->new);
21 warn("I: reloaded\n");
23 warn("E: reloading failed\n");
32 $watch->trigger_scan('full');
35 $watch->quit if $watch;
42 CHLD => \&PublicInbox::DS::enqueue_reap,
44 $sig->{QUIT} = $sig->{TERM} = $sig->{INT} = $quit;
46 # --no-scan is only intended for testing atm, undocumented.
47 unless (grep(/\A--no-scan\z/, @ARGV)) {
48 PublicInbox::DS::requeue($scan);
50 my $sigfd = PublicInbox::Sigfd->new($sig, $SFD_NONBLOCK);
51 local %SIG = (%SIG, %$sig) if !$sigfd;
53 PublicInbox::Sigfd::set_sigmask($oldset);
54 PublicInbox::DS->SetLoopTimeout(1000);
56 $watch->watch($sig, $oldset) while ($watch);