aboutsummaryrefslogtreecommitdiffstats
path: root/CHANGELOG.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-15 15:54:03 +0200
committerDanilo M. <danix@danix.xyz>2026-08-15 15:54:03 +0200
commit1062eedaff00a46918f379bd70d210ce95861c93 (patch)
treececbfa26a57812e515f45103e644dafd5ffa052f /CHANGELOG.md
parentc3dd54e390d236b7d68bae456ef39c5fa7fb49d5 (diff)
downloadqtmaildir-1062eedaff00a46918f379bd70d210ce95861c93.tar.gz
qtmaildir-1062eedaff00a46918f379bd70d210ce95861c93.zip
fix(sync): re-arm the automatic sync when it skips a concurrent run
runAutoSync() returned without rescheduling when a sync was already in flight. The comment defending it argued the edits were not lost, because they reached the mail store at edit time and the running sync was "very likely" to carry them. Very likely is not always: an edit made after mbsync has already passed that account's mailbox is not carried by it, the timer had fired, nothing re-armed it, and the pending count sat non-zero until a manual sync or the next cron run. Skipping is unchanged and still required by item 71: the cron job holds the same lock and mbsync fails on a second concurrent run. What changes is that the skip schedules another attempt. scheduleAutoSync() re-checks the delay, the sync command and the pending count on the way in, so this cannot arm a sync for nothing, and against a long external sync it re-arms once per debounce interval, which is a timer rather than a sync. The test fires the timer by hand and asserts it is active again afterwards, at the configured interval rather than a shorter one, with the pending indicator still showing. It fails against the old skip path. Item 89's other half is dropped rather than built. The list churn it described is a tag-defined view working as intended: a thread that loses `unread` leaves the Unread view, and the user resolved it by living in the Inbox view instead. Three designs were drafted before asking and none is worth building. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'CHANGELOG.md')
-rw-r--r--CHANGELOG.md5
1 files changed, 5 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6701fae..816f03b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,11 @@ point at which they are stable.
naming what it had been showing, so selecting that thread again was read as
"already displayed" and never loaded it. This is why an `id:` query copied
out of a message's own details dialog produced a card that would not open.
+- An automatic sync skipped because another sync was already running gave up
+ instead of trying again, so an edit the running sync had already passed sat
+ pending until a manual sync or the next cron run. It now re-arms at the
+ configured delay. Skipping a concurrent run is unchanged: two mbsync runs
+ cannot share the lock.
## [0.23.0] - 2026-08-15