dovecot-2.2: lib-index: mail_cache_lookup*() can now finds also ...

dovecot at dovecot.org dovecot at dovecot.org
Sat Nov 16 19:20:21 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/c7e55077ea4e
changeset: 16955:c7e55077ea4e
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Nov 16 19:20:10 2013 +0200
description:
lib-index: mail_cache_lookup*() can now finds also the latest mail_cache_add()ed data.

diffstat:

 src/lib-index/mail-cache-transaction.c |  26 +++++++++++++++++++++-----
 1 files changed, 21 insertions(+), 5 deletions(-)

diffs (59 lines):

diff -r 7e813ff117a3 -r c7e55077ea4e src/lib-index/mail-cache-transaction.c
--- a/src/lib-index/mail-cache-transaction.c	Sat Nov 16 17:46:10 2013 +0200
+++ b/src/lib-index/mail-cache-transaction.c	Sat Nov 16 19:20:10 2013 +0200
@@ -52,6 +52,7 @@
 				  &mail_index_module_register);
 
 static int mail_cache_transaction_lock(struct mail_cache_transaction_ctx *ctx);
+static size_t mail_cache_transaction_update_last_rec_size(struct mail_cache_transaction_ctx *ctx);
 
 static void mail_index_transaction_cache_reset(struct mail_index_transaction *t)
 {
@@ -293,7 +294,14 @@
 						recs[i].cache_data_pos);
 		}
 	}
-	*trans_next_idx = i;
+	*trans_next_idx = i + 1;
+	if (seq == ctx->prev_seq && i == count) {
+		/* update the unfinished record's (temporary) size and
+		   return it */
+		mail_cache_transaction_update_last_rec_size(ctx);
+		return CONST_PTR_OFFSET(ctx->cache_data->data,
+					ctx->last_rec_pos);
+	}
 	return NULL;
 }
 
@@ -446,10 +454,9 @@
 	return ret;
 }
 
-static void
-mail_cache_transaction_update_last_rec(struct mail_cache_transaction_ctx *ctx)
+static size_t
+mail_cache_transaction_update_last_rec_size(struct mail_cache_transaction_ctx *ctx)
 {
-	struct mail_cache_transaction_rec *trans_rec;
 	struct mail_cache_record *rec;
 	void *data;
 	size_t size;
@@ -458,8 +465,17 @@
 	rec = PTR_OFFSET(data, ctx->last_rec_pos);
 	rec->size = size - ctx->last_rec_pos;
 	i_assert(rec->size > sizeof(*rec));
+	return rec->size;
+}
 
-	if (rec->size > MAIL_CACHE_RECORD_MAX_SIZE) {
+static void
+mail_cache_transaction_update_last_rec(struct mail_cache_transaction_ctx *ctx)
+{
+	struct mail_cache_transaction_rec *trans_rec;
+	size_t size;
+
+	size = mail_cache_transaction_update_last_rec_size(ctx);
+	if (size > MAIL_CACHE_RECORD_MAX_SIZE) {
 		buffer_set_used_size(ctx->cache_data, ctx->last_rec_pos);
 		return;
 	}


More information about the dovecot-cvs mailing list