mirror of
https://github.com/spartanz51/tutabridge.git
synced 2026-06-24 10:54:32 +02:00
Loading a cached folder, and the one-time full-text backfill, both decrypt every cached .eml.enc body (AES-CBC plus an HMAC-SHA256 verification) in a tight loop with no await points. Run inline on a tokio worker, that loop keeps the worker and the IO driver it holds busy for the whole duration, so the IMAP and SMTP accept loops stop being polled. On a large mailbox, connecting a client or sending a message times out for the first 10 to 90 seconds after launch while the cache loads, even though most cores sit idle. Profiling during the stall showed 15 of 16 workers parked, 1 grinding through SHA-256 and AES, and nothing polling kqueue. Move the per mail decode (metadata deserialize, body read and decrypt) onto the blocking pool via spawn_blocking, for both the startup cache load and the FTS backfill. The worker threads stay free to drive IO, so IMAP and SMTP answer immediately while the mailbox loads in the background.