From: Timo Sirainen Date: Fri, 2 Mar 2012 12:36:13 +0000 (+0200) Subject: lib-storage: mail_transaction_commit_changes.changed=TRUE only when something actuall... X-Git-Tag: 2.1.2~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=900bb5e316d030cdebff7ee128ce65881dfb27f7;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: mail_transaction_commit_changes.changed=TRUE only when something actually changed. --- diff --git a/src/lib-storage/index/index-transaction.c b/src/lib-storage/index/index-transaction.c index 4a3a61503f..132187c903 100644 --- a/src/lib-storage/index/index-transaction.c +++ b/src/lib-storage/index/index-transaction.c @@ -21,10 +21,15 @@ index_transaction_index_commit(struct mail_index_transaction *index_trans, MAIL_STORAGE_CONTEXT(index_trans); int ret = 0; + if (t->nontransactional_changes) + t->changes->changed = TRUE; + if (t->save_ctx != NULL) { if (t->box->v.transaction_save_commit_pre(t->save_ctx) < 0) { t->save_ctx = NULL; ret = -1; + } else { + t->changes->changed = TRUE; } } @@ -35,6 +40,9 @@ index_transaction_index_commit(struct mail_index_transaction *index_trans, if (t->super.commit(index_trans, result_r) < 0) { mail_storage_set_index_error(t->box); ret = -1; + } else if (result_r->commit_size > 0) { + /* something was written to the transaction log */ + t->changes->changed = TRUE; } } diff --git a/src/lib-storage/index/maildir/maildir-mail.c b/src/lib-storage/index/maildir/maildir-mail.c index ed4947b52b..8abbc2cc61 100644 --- a/src/lib-storage/index/maildir/maildir-mail.c +++ b/src/lib-storage/index/maildir/maildir-mail.c @@ -593,6 +593,7 @@ static void maildir_update_pop3_uidl(struct mail *_mail, const char *uidl) uidl = ""; } + _mail->transaction->nontransactional_changes = TRUE; maildir_uidlist_set_ext(mbox->uidlist, _mail->uid, MAILDIR_UIDLIST_REC_EXT_POP3_UIDL, uidl); } diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index c506d84958..436ffdd943 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -395,6 +395,8 @@ struct mailbox_transaction_context { struct mailbox_transaction_stats stats; /* Set to TRUE to update stats_* fields */ unsigned int stats_track:1; + /* We've done some non-transactional (e.g. dovecot-uidlist updates) */ + unsigned int nontransactional_changes:1; }; union mail_search_module_context { diff --git a/src/lib-storage/mail-storage.h b/src/lib-storage/mail-storage.h index c80883d86e..88784c6501 100644 --- a/src/lib-storage/mail-storage.h +++ b/src/lib-storage/mail-storage.h @@ -265,6 +265,9 @@ struct mail_transaction_commit_changes { /* number of modseq changes that couldn't be changed as requested */ unsigned int ignored_modseq_changes; + + /* TRUE if anything actually changed with this commit */ + bool changed; }; struct mailbox_sync_rec {