lib/PublicInbox/NNTP.pm | 15 ++++++++++++--- t/nntpd.t | 1 + diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index b07e1845c2321962bb7962a926cc04032ce10aff..56d08385da0f6a4b924e07ffb01662ad288f0715 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -998,10 +998,19 @@ } $rv; } +sub not_idle_long ($$) { + my ($self, $now) = @_; + defined(my $fd = $self->{fd}) or return; + my $ary = $EXPMAP->{$fd} or return; + my $exp_at = $ary->[0] + $EXPTIME; + $exp_at > $now; +} + # for graceful shutdown in PublicInbox::Daemon: -sub busy () { - my ($self) = @_; - ($self->{rbuf} ne '' || $self->{long_res} || $self->{write_buf_size}); +sub busy { + my ($self, $now) = @_; + ($self->{rbuf} ne '' || $self->{long_res} || $self->{write_buf_size} || + not_idle_long($self, $now)); } 1; diff --git a/t/nntpd.t b/t/nntpd.t index 5875b737360b35a41803f1327339e6fe8e4f2e0d..7192d7819dd6d12e9a758581da373042cc39091b 100644 --- a/t/nntpd.t +++ b/t/nntpd.t @@ -219,6 +219,7 @@ 'got 5xx response for unoptimized HDR'); is(scalar @r, 1, 'only one response line'); } + $n = $s = undef; is($pid, waitpid($pid, 0), 'nntpd exited successfully'); my $eout = eval { local $/;