Mercurial > dovecot > original-hg > dovecot-1.2
changeset 6097:d5d3adb86e12 HEAD
Don't update maildir sync header if only sync time has changed, and that
hasn't changed delayed-refresh state.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 19 Jul 2007 03:51:31 +0300 |
parents | 877d861f2dd3 |
children | a9ad568ce598 |
files | src/lib-storage/index/maildir/maildir-sync-index.c |
diffstat | 1 files changed, 21 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-sync-index.c Thu Jul 19 03:37:43 2007 +0300 +++ b/src/lib-storage/index/maildir/maildir-sync-index.c Thu Jul 19 03:51:31 2007 +0300 @@ -219,6 +219,26 @@ return ret; } +static bool +maildir_index_header_has_changed(const struct maildir_index_header *old_hdr, + const struct maildir_index_header *new_hdr) +{ +#define DIR_DELAYED_REFRESH(hdr, name) \ + ((hdr)->name ## _check_time <= \ + (hdr)->name ## _mtime + MAILDIR_SYNC_SECS) + + if (old_hdr->new_mtime != new_hdr->new_mtime || + old_hdr->cur_mtime != new_hdr->cur_mtime || + old_hdr->new_mtime_nsecs != new_hdr->new_mtime_nsecs || + old_hdr->cur_mtime_nsecs != new_hdr->cur_mtime_nsecs) + return TRUE; + + return DIR_DELAYED_REFRESH(old_hdr, new) != + DIR_DELAYED_REFRESH(new_hdr, new) || + DIR_DELAYED_REFRESH(old_hdr, cur) != + DIR_DELAYED_REFRESH(new_hdr, cur); +} + static void maildir_index_update_ext_header(struct maildir_mailbox *mbox, struct mail_index_transaction *trans) @@ -231,7 +251,7 @@ data_size = 0; if (data_size == sizeof(mbox->maildir_hdr) && - memcmp(data, &mbox->maildir_hdr, data_size) == 0) { + !maildir_index_header_has_changed(data, &mbox->maildir_hdr)) { /* nothing changed */ } else { mail_index_update_header_ext(trans, mbox->maildir_ext_id, 0,