dovecot-2.2: mailbox_list_index=yes iteration: Don't allocate re...

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


details:   http://hg.dovecot.org/dovecot-2.2/rev/6cb102aa5d63
changeset: 14334:6cb102aa5d63
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Mar 13 21:18:32 2012 +0200
description:
mailbox_list_index=yes iteration: Don't allocate returned mailbox names from data stack.
This breaks dsync.

diffstat:

 src/lib-storage/list/mailbox-list-index-iter.c |  5 +++++
 src/lib-storage/list/mailbox-list-index.h      |  2 ++
 2 files changed, 7 insertions(+), 0 deletions(-)

diffs (47 lines):

diff -r a3b162331cd1 -r 6cb102aa5d63 src/lib-storage/list/mailbox-list-index-iter.c
--- a/src/lib-storage/list/mailbox-list-index-iter.c	Tue Mar 13 17:01:56 2012 +0200
+++ b/src/lib-storage/list/mailbox-list-index-iter.c	Tue Mar 13 21:18:32 2012 +0200
@@ -25,6 +25,7 @@
 	ctx->ctx.glob = imap_match_init_multiple(pool, patterns, TRUE, ns_sep);
 	array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
 	ctx->sep = ns_sep;
+	ctx->info_pool = pool_alloconly_create("mailbox list index iter info", 128);
 
 	if (mailbox_list_index_refresh(ctx->ctx.list) < 0) {
 		/* no indexing */
@@ -46,12 +47,15 @@
 	struct mailbox_list_index_node *node = ctx->next_node;
 	struct mailbox *box;
 
+	p_clear(ctx->info_pool);
+
 	str_truncate(ctx->path, ctx->parent_len);
 	if (str_len(ctx->path) > 0)
 		str_append_c(ctx->path, ctx->sep);
 	str_append(ctx->path, node->name);
 
 	ctx->info.name = mailbox_list_get_vname(ctx->ctx.list, str_c(ctx->path));
+	ctx->info.name = p_strdup(ctx->info_pool, ctx->info.name);
 	ctx->info.flags = 0;
 	if ((node->flags & MAILBOX_LIST_INDEX_FLAG_NONEXISTENT) != 0)
 		ctx->info.flags |= MAILBOX_NONEXISTENT;
@@ -166,6 +170,7 @@
 		ilist->iter_refcount--;
 	}
 
+	pool_unref(&ctx->info_pool);
 	pool_unref(&_ctx->pool);
 	return ret;
 }
diff -r a3b162331cd1 -r 6cb102aa5d63 src/lib-storage/list/mailbox-list-index.h
--- a/src/lib-storage/list/mailbox-list-index.h	Tue Mar 13 17:01:56 2012 +0200
+++ b/src/lib-storage/list/mailbox-list-index.h	Tue Mar 13 21:18:32 2012 +0200
@@ -109,6 +109,8 @@
 	struct mailbox_list_iterate_context *backend_ctx;
 
 	struct mailbox_info info;
+	pool_t info_pool;
+
 	unsigned int parent_len;
 	string_t *path;
 	struct mailbox_list_index_node *next_node;


More information about the dovecot-cvs mailing list