diff options
author | Eric Wong <e@80x24.org> | 2022-09-10 01:18:59 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2022-09-10 01:35:02 +0000 |
commit | c03e3836f127f549b8568b05ada7ab81684539fc (patch) | |
tree | fb49cfb9cd2cb9a470f55fb584ba7694d15b0153 /lib/PublicInbox/LeiToMail.pm | |
parent | 0ce21001f0fd7f2369611f350f4722bb9597eca3 (diff) | |
download | public-inbox-c03e3836f127f549b8568b05ada7ab81684539fc.tar.gz |
Excessive IMAP connections can overload IMAP servers and cause clients to be disconnected without diagnostic messages. Use $lei->fail on these exceptions to propagate errors to the CLI ASAP to avoid further errors down the line. This ought to make problems more apparent for users using IMAP destinations. Reported-by: Ricardo Ribalda <ribalda@chromium.org> Link: https://public-inbox.org/meta/CANiDSCsDfutAUMBLPZbxdyka+_jnhv+4YNYdL9QPRoC=wNUGCQ@mail.gmail.com/
Diffstat (limited to 'lib/PublicInbox/LeiToMail.pm')
-rw-r--r-- | lib/PublicInbox/LeiToMail.pm | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/PublicInbox/LeiToMail.pm b/lib/PublicInbox/LeiToMail.pm index 2aa3977e..03cbde3b 100644 --- a/lib/PublicInbox/LeiToMail.pm +++ b/lib/PublicInbox/LeiToMail.pm @@ -310,8 +310,11 @@ sub _imap_write_cb ($$) { my $dedupe = $lei->{dedupe}; $dedupe->prepare_dedupe if $dedupe; my $append = $lei->{net}->can('imap_append'); - my $uri = $self->{uri}; - my $mic = $lei->{net}->mic_get($uri); + my $uri = $self->{uri} // die 'BUG: no {uri}'; + my $mic = $lei->{net}->mic_get($uri) // die <<EOM; +E: $uri connection failed. +E: Consider using `--jobs ,1' to limit IMAP connections +EOM my $folder = $uri->mailbox; $uri->uidvalidity($mic->uidvalidity($folder)); my $lse = $lei->{lse}; # may be undef @@ -749,7 +752,8 @@ sub do_post_auth { $au_peers->[1] = undef; sysread($au_peers->[0], my $barrier1, 1); } - $self->{wcb} = $self->write_cb($lei); + eval { $self->{wcb} = $self->write_cb($lei) }; + $lei->fail($@) if $@; if ($au_peers) { # wait for peer l2m to set write_cb $au_peers->[3] = undef; sysread($au_peers->[2], my $barrier2, 1); |