Files
pl_mail/tests
Paul LütznerandClaude Opus 5.5 b67e6dfd2b Close an IMAP conversation a worker has spent five minutes on
Both import consumers sat twenty minutes and more inside one fetch from
a server delivering a few kilobytes every twenty seconds (#95). The
thirty-second read timeout is per read and a trickle never trips it;
nothing timed the command. A consumer handles one message at a time, so
every other account's import waited behind it, and a stop signal did
nothing: a worker stops between messages.

ImapDeadline runs an alarm around every message a worker handles
(AbortStalledImap, for a received envelope only). When it goes off, the
IMAP connections opened since are shut down under their reader. The
read is at end-of-file at once, the library reports a lost connection,
and the message takes its retry ladder like any other network failure.

  not an exception   thrown from a signal handler it would land in the
  from the alarm     middle of a flush as readily as a read
  shutdown, not      webklex's logout() and destructor call
  fclose             stream_get_meta_data() on the stream and die with
                     a TypeError on a closed resource
  a total, not a     so it has to fit honest work: five minutes, which
  rate               is seconds for an ordinary page of fifty messages
                     and tight only for ~300 MB of attachments on a
                     slow line. Wrong, it shows as the class's warning
                     repeating for one folder

Checked against imap.gmail.com over TLS: after the shutdown a read
returns empty in under a millisecond with eof set.

The IDLE process holds its connection for twenty-nine minutes on
purpose and is not a worker handling a message; it is never armed.

Also the changelog for #94 and #96.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:28:53 +02:00
..