diff options
author | Eric Wong <e@80x24.org> | 2020-12-26 09:34:39 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2020-12-26 20:20:13 +0000 |
commit | 933fce93167eba8645e637c363561575db9f9420 (patch) | |
tree | f871ec5283e0b3d1db5456b6bbe3a87d6e5fe1f7 /t | |
parent | a0b470cbaf01c699e008818ff0f137d24b1959b1 (diff) | |
download | public-inbox-933fce93167eba8645e637c363561575db9f9420.tar.gz |
We don't have to replace a bunch of existing watches with identical new ones. On Linux with Linux::Inotify2 installed, this avoids a storm of inotify_add_watch(2) and inotify_rm_watch(2) syscalls on SIGHUP with -imapd and "-extindex --watch" (cherry picked from commit 10bf54305da8422d9ece6b809996092c1c4b1786) Note: this seems to fix missed wakeups with many watches, so it's in the stable branch. Link: https://public-inbox.org/meta/20201226201115.GA30142@dcvr/
Diffstat (limited to 't')
-rw-r--r-- | t/imapd.t | 26 |
1 files changed, 5 insertions, 21 deletions
@@ -296,27 +296,11 @@ $pi_config->each_inbox(sub { # ensure IDLE persists across HUP, w/o extra watches or FDs $td->kill('HUP') or BAIL_OUT "failed to kill -imapd: $!"; - SKIP: { - skip 'no inotify fdinfo (or support)', 2 if !@ino_info; - my (@tmp, %prev); - local $/ = "\n"; - my $end = time + 5; - until (time > $end) { - select undef, undef, undef, 0.01; - open my $fh, '<', $ino_fdinfo or - BAIL_OUT "$ino_fdinfo: $!"; - %prev = map { $_ => 1 } @ino_info; - @tmp = grep(/^inotify wd:/, <$fh>); - if (scalar(@tmp) == scalar(@ino_info)) { - delete @prev{@tmp}; - last if scalar(keys(%prev)) == @ino_info; - } - } - is(scalar @tmp, scalar @ino_info, - 'old inotify watches replaced'); - is(scalar keys %prev, scalar @ino_info, - 'no previous watches overlap'); - }; + for my $n (1..2) { # kick the event loop so we know HUP is done + my $m = $imap_client->new(%mic_opt); + ok($m->login && $m->IsAuthenticated && $m->logout, + "connection $n works after HUP"); + } open($fh, '<', 't/data/0001.patch') or BAIL_OUT("open: $!"); run_script(['-mda', '--no-precheck'], $env, { 0 => $fh }) or |