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