dovecot-2.2: lib-storage: mail_transaction_commit_changes.change...

dovecot at dovecot.org dovecot at dovecot.org
Sun May 20 03:26:24 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/3e9f91d8b2af
changeset: 14254:3e9f91d8b2af
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Mar 02 14:36:13 2012 +0200
description:
lib-storage: mail_transaction_commit_changes.changed=TRUE only when something actually changed.

diffstat:

 src/lib-storage/index/index-transaction.c    |  8 ++++++++
 src/lib-storage/index/maildir/maildir-mail.c |  1 +
 src/lib-storage/mail-storage-private.h       |  2 ++
 src/lib-storage/mail-storage.h               |  3 +++
 4 files changed, 14 insertions(+), 0 deletions(-)

diffs (65 lines):

diff -r 91e035840dc6 -r 3e9f91d8b2af src/lib-storage/index/index-transaction.c
--- a/src/lib-storage/index/index-transaction.c	Fri Mar 02 14:33:41 2012 +0200
+++ b/src/lib-storage/index/index-transaction.c	Fri Mar 02 14:36:13 2012 +0200
@@ -21,10 +21,15 @@
 		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 @@
 		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 -r 91e035840dc6 -r 3e9f91d8b2af src/lib-storage/index/maildir/maildir-mail.c
--- a/src/lib-storage/index/maildir/maildir-mail.c	Fri Mar 02 14:33:41 2012 +0200
+++ b/src/lib-storage/index/maildir/maildir-mail.c	Fri Mar 02 14:36:13 2012 +0200
@@ -593,6 +593,7 @@
 		uidl = "";
 	}
 
+	_mail->transaction->nontransactional_changes = TRUE;
 	maildir_uidlist_set_ext(mbox->uidlist, _mail->uid,
 				MAILDIR_UIDLIST_REC_EXT_POP3_UIDL, uidl);
 }
diff -r 91e035840dc6 -r 3e9f91d8b2af src/lib-storage/mail-storage-private.h
--- a/src/lib-storage/mail-storage-private.h	Fri Mar 02 14:33:41 2012 +0200
+++ b/src/lib-storage/mail-storage-private.h	Fri Mar 02 14:36:13 2012 +0200
@@ -395,6 +395,8 @@
 	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 -r 91e035840dc6 -r 3e9f91d8b2af src/lib-storage/mail-storage.h
--- a/src/lib-storage/mail-storage.h	Fri Mar 02 14:33:41 2012 +0200
+++ b/src/lib-storage/mail-storage.h	Fri Mar 02 14:36:13 2012 +0200
@@ -265,6 +265,9 @@
 
 	/* 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 {


More information about the dovecot-cvs mailing list