Mercurial > dovecot > core-2.2
changeset 8940:f54e0ccb91ab HEAD
indexes: Don't add ext-intros unnecessarily twice for ext-rec updates.
Also did some code cleanups.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 09 Mar 2009 20:51:35 -0400 |
parents | dc421589c090 |
children | 61795c86bce8 |
files | src/lib-index/mail-transaction-log-append.c |
diffstat | 1 files changed, 20 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-transaction-log-append.c Mon Mar 09 20:17:30 2009 -0400 +++ b/src/lib-index/mail-transaction-log-append.c Mon Mar 09 20:51:35 2009 -0400 @@ -236,7 +236,7 @@ { struct mail_index_transaction *t = ctx->trans; const struct mail_index_registered_ext *rext; - struct mail_transaction_ext_intro *intro; + struct mail_transaction_ext_intro *intro, *resizes; buffer_t *buf; uint32_t idx; unsigned int count; @@ -251,16 +251,16 @@ rext = array_idx(&t->view->index->extensions, ext_id); if (!array_is_created(&t->ext_resizes)) { - intro = NULL; + resizes = NULL; count = 0; } else { - intro = array_get_modifiable(&t->ext_resizes, &count); + resizes = array_get_modifiable(&t->ext_resizes, &count); } buf = buffer_create_dynamic(pool_datastack_create(), 128); - if (ext_id < count && intro[ext_id].name_size != 0) { - /* we're resizing it */ - intro += ext_id; + if (ext_id < count && resizes[ext_id].name_size != 0) { + /* we're resizing the extension. use the resize struct. */ + intro = &resizes[ext_id]; i_assert(intro->ext_id == idx); intro->name_size = idx != (uint32_t)-1 ? 0 : @@ -344,21 +344,12 @@ const struct mail_transaction_ext_intro *resize; const struct mail_index_transaction_ext_hdr_update *hdrs; struct mail_transaction_ext_reset ext_reset; - unsigned int update_count, resize_count, ext_count = 0; + unsigned int resize_count, ext_count = 0; unsigned int hdrs_count, reset_id_count, reset_count; uint32_t ext_id, reset_id; const struct mail_transaction_ext_reset *reset; const uint32_t *reset_ids; - const ARRAY_TYPE(seq_array) *update; - buffer_t *buf; - - if (!array_is_created(&t->ext_rec_updates)) { - update = NULL; - update_count = 0; - } else { - update = array_get(&t->ext_rec_updates, &update_count); - ext_count = update_count; - } + buffer_t *reset_buf; if (!array_is_created(&t->ext_resizes)) { resize = NULL; @@ -395,9 +386,9 @@ } memset(&ext_reset, 0, sizeof(ext_reset)); - buf = buffer_create_data(pool_datastack_create(), - &ext_reset, sizeof(ext_reset)); - buffer_set_used_size(buf, sizeof(ext_reset)); + reset_buf = buffer_create_data(pool_datastack_create(), + &ext_reset, sizeof(ext_reset)); + buffer_set_used_size(reset_buf, sizeof(ext_reset)); for (ext_id = 0; ext_id < ext_count; ext_id++) { if (ext_id < reset_count) @@ -405,19 +396,22 @@ else ext_reset.new_reset_id = 0; if ((ext_id < resize_count && resize[ext_id].name_size) || - (ext_id < update_count && - array_is_created(&update[ext_id])) || ext_reset.new_reset_id != 0 || (ext_id < hdrs_count && hdrs[ext_id].alloc_size > 0)) { - reset_id = ext_id < reset_id_count && - ext_reset.new_reset_id == 0 ? - reset_ids[ext_id] : 0; + if (ext_reset.new_reset_id != 0) { + /* we're going to reset this extension + immediately after the intro */ + reset_id = 0; + } else { + reset_id = ext_id < reset_id_count ? + reset_ids[ext_id] : 0; + } log_append_ext_intro(ctx, ext_id, reset_id); } if (ext_reset.new_reset_id != 0) { i_assert(ext_id < reset_id_count && ext_reset.new_reset_id == reset_ids[ext_id]); - log_append_buffer(ctx, buf, NULL, + log_append_buffer(ctx, reset_buf, NULL, MAIL_TRANSACTION_EXT_RESET); } if (ext_id < hdrs_count && hdrs[ext_id].alloc_size > 0) {