]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mail_transaction_commit_changes.changed=TRUE only when something actuall...
authorTimo Sirainen <tss@iki.fi>
Fri, 2 Mar 2012 12:36:13 +0000 (14:36 +0200)
committerTimo Sirainen <tss@iki.fi>
Fri, 2 Mar 2012 12:36:13 +0000 (14:36 +0200)
src/lib-storage/index/index-transaction.c
src/lib-storage/index/maildir/maildir-mail.c
src/lib-storage/mail-storage-private.h
src/lib-storage/mail-storage.h

index 4a3a61503f6d7350dc08650a3bb4e36c0f4e8173..132187c903c6e546aa5f2d8436717d1d7855d989 100644 (file)
@@ -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;
                }
        }
 
index ed4947b52b354108df536224b6793e16f91d6b0b..8abbc2cc61f05717ee6ced580d386560497ea054 100644 (file)
@@ -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);
 }
index c506d84958356b8cdf7d18d2a7e9f4b7198ccb22..436ffdd943eb0ee886ac298bb0193d803973a98d 100644 (file)
@@ -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 {
index c80883d86e9a10f8638822de678744f7be2435d7..88784c650138cc68db3a8f7e0579c46e1a52be2e 100644 (file)
@@ -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 {