diff options
author | Eric Wong <e@80x24.org> | 2023-03-26 10:52:46 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2023-03-26 11:45:58 +0000 |
commit | 78cf2586c2e9d7f8e7a77c24ccca3d054ab9d0a6 (patch) | |
tree | 976f7695d6b474ba220ac4ddaef8b4abb11a6ef4 | |
parent | ab2ee025d73f91761265d544c0a11f2b9e20c342 (diff) | |
download | public-inbox-78cf2586c2e9d7f8e7a77c24ccca3d054ab9d0a6.tar.gz |
The normal method by which PublicInbox::DS::event_loop sets up signals once needs some coercing to work with -watch. Otherwise, we'll end up wasting FDs every time somebody reloads -watch via SIGHUP.
-rw-r--r-- | lib/PublicInbox/Watch.pm | 5 | ||||
-rwxr-xr-x | script/public-inbox-watch | 1 |
2 files changed, 4 insertions, 2 deletions
diff --git a/lib/PublicInbox/Watch.pm b/lib/PublicInbox/Watch.pm index 810fb63b..693c7181 100644 --- a/lib/PublicInbox/Watch.pm +++ b/lib/PublicInbox/Watch.pm @@ -528,7 +528,8 @@ sub watch_nntp_init ($$) { sub watch { # main entry point my ($self, $sig, $oldset) = @_; $self->{oldset} = $oldset; - $self->{sig} = $sig; + my $first_sig; + $self->{sig} //= ($first_sig = $sig); my $poll = {}; # intvl_seconds => [ uri1, uri2 ] watch_imap_init($self, $poll) if $self->{imap}; watch_nntp_init($self, $poll) if $self->{nntp}; @@ -538,7 +539,7 @@ sub watch { # main entry point } watch_fs_init($self) if $self->{mdre}; local @PublicInbox::DS::post_loop_do = (sub { !$self->quit_done }); - PublicInbox::DS::event_loop($sig, $oldset); # calls ->event_step + PublicInbox::DS::event_loop($first_sig, $oldset); # calls ->event_step _done_for_now($self); } diff --git a/script/public-inbox-watch b/script/public-inbox-watch index 4c50461f..2fb27343 100755 --- a/script/public-inbox-watch +++ b/script/public-inbox-watch @@ -27,6 +27,7 @@ my $reload = sub { $watch->quit; $watch = PublicInbox::Watch->new(PublicInbox::Config->new); if ($watch) { + $watch->{sig} = $prev->{sig}; # prevent redundant signalfd warn "# reloaded\n"; } else { warn("E: reloading failed\n"); |