dovecot-2.1: lib-storage: Added pool to struct mailbox_list_iter...

dovecot at dovecot.org dovecot at dovecot.org
Fri Dec 2 14:49:37 EET 2011


details:   http://hg.dovecot.org/dovecot-2.1/rev/b48fb6a08389
changeset: 13792:b48fb6a08389
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Dec 02 14:49:08 2011 +0200
description:
lib-storage: Added pool to struct mailbox_list_iterate_context.

diffstat:

 src/lib-storage/index/imapc/imapc-list.c          |  14 ++++----
 src/lib-storage/index/shared/shared-list.c        |  14 ++++----
 src/lib-storage/list/mailbox-list-fs-iter.c       |  34 ++++++++--------------
 src/lib-storage/list/mailbox-list-index-iter.c    |  17 +++++------
 src/lib-storage/list/mailbox-list-maildir-iter.c  |   7 ++--
 src/lib-storage/list/mailbox-list-none.c          |  13 ++++----
 src/lib-storage/list/mailbox-list-subscriptions.c |  15 ++++-----
 src/lib-storage/mailbox-list-private.h            |   1 +
 src/plugins/acl/acl-mailbox-list.c                |  11 ++++---
 9 files changed, 59 insertions(+), 67 deletions(-)

diffs (truncated from 389 to 300 lines):

diff -r 37c2348b67f5 -r b48fb6a08389 src/lib-storage/index/imapc/imapc-list.c
--- a/src/lib-storage/index/imapc/imapc-list.c	Fri Dec 02 14:23:47 2011 +0200
+++ b/src/lib-storage/index/imapc/imapc-list.c	Fri Dec 02 14:49:08 2011 +0200
@@ -360,6 +360,7 @@
 	struct imapc_mailbox_list *list = (struct imapc_mailbox_list *)_list;
 	struct mailbox_list_iterate_context *_ctx;
 	struct imapc_mailbox_list_iterate_context *ctx;
+	pool_t pool;
 	const char *ns_root_name;
 	char sep;
 	int ret = 0;
@@ -382,12 +383,13 @@
 
 	sep = mailbox_list_get_hierarchy_sep(_list);
 
-	ctx = i_new(struct imapc_mailbox_list_iterate_context, 1);
+	pool = pool_alloconly_create("mailbox list imapc iter", 1024);
+	ctx = p_new(pool, struct imapc_mailbox_list_iterate_context, 1);
+	ctx->ctx.pool = pool;
 	ctx->ctx.list = _list;
 	ctx->ctx.flags = flags;
-	ctx->ctx.glob = imap_match_init_multiple(default_pool, patterns,
-						 FALSE, sep);
-	array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5);
+	ctx->ctx.glob = imap_match_init_multiple(pool, patterns, FALSE, sep);
+	array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
 
 	ctx->info.ns = _list->ns;
 
@@ -451,9 +453,7 @@
 
 	mailbox_tree_iterate_deinit(&ctx->iter);
 	mailbox_tree_deinit(&ctx->tree);
-	imap_match_deinit(&_ctx->glob);
-	array_free(&_ctx->module_contexts);
-	i_free(ctx);
+	pool_unref(&_ctx->pool);
 	return ret;
 }
 
diff -r 37c2348b67f5 -r b48fb6a08389 src/lib-storage/index/shared/shared-list.c
--- a/src/lib-storage/index/shared/shared-list.c	Fri Dec 02 14:23:47 2011 +0200
+++ b/src/lib-storage/index/shared/shared-list.c	Fri Dec 02 14:49:08 2011 +0200
@@ -177,14 +177,16 @@
 		      enum mailbox_list_iter_flags flags)
 {
 	struct mailbox_list_iterate_context *ctx;
+	pool_t pool;
 	char sep = mail_namespace_get_sep(list->ns);
 
-	ctx = i_new(struct mailbox_list_iterate_context, 1);
+	pool = pool_alloconly_create("mailbox list shared iter", 1024);
+	ctx = p_new(pool, struct mailbox_list_iterate_context, 1);
+	ctx->pool = pool;
 	ctx->list = list;
 	ctx->flags = flags;
-	ctx->glob = imap_match_init_multiple(default_pool, patterns,
-					     FALSE, sep);
-	array_create(&ctx->module_contexts, default_pool, sizeof(void *), 5);
+	ctx->glob = imap_match_init_multiple(pool, patterns, FALSE, sep);
+	array_create(&ctx->module_contexts, pool, sizeof(void *), 5);
 
 	if ((flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) == 0 &&
 	    (list->ns->flags & NAMESPACE_FLAG_AUTOCREATED) == 0) T_BEGIN {
@@ -201,9 +203,7 @@
 
 static int shared_list_iter_deinit(struct mailbox_list_iterate_context *ctx)
 {
-	imap_match_deinit(&ctx->glob);
-	array_free(&ctx->module_contexts);
-	i_free(ctx);
+	pool_unref(&ctx->pool);
 	return 0;
 }
 
diff -r 37c2348b67f5 -r b48fb6a08389 src/lib-storage/list/mailbox-list-fs-iter.c
--- a/src/lib-storage/list/mailbox-list-fs-iter.c	Fri Dec 02 14:23:47 2011 +0200
+++ b/src/lib-storage/list/mailbox-list-fs-iter.c	Fri Dec 02 14:49:08 2011 +0200
@@ -36,7 +36,7 @@
 struct fs_list_iterate_context {
 	struct mailbox_list_iterate_context ctx;
 
-	ARRAY_DEFINE(valid_patterns, char *);
+	ARRAY_DEFINE(valid_patterns, const char *);
 	char sep;
 
 	enum mailbox_info_flags inbox_flags;
@@ -128,7 +128,7 @@
 static int list_opendir(struct fs_list_iterate_context *ctx,
 			const char *path, const char *list_path, DIR **dirp)
 {
-	char *const *patterns;
+	const char *const *patterns;
 	unsigned int i;
 
 	/* if no patterns have wildcards at this point of the path, we don't
@@ -209,7 +209,8 @@
 {
 	struct fs_list_iterate_context *ctx;
 	const char *path, *vpath, *rootdir, *test_pattern, *real_pattern;
-	char *pattern;
+	pool_t pool;
+	const char *pattern;
 	DIR *dirp;
 	unsigned int prefix_len;
 	int ret;
@@ -221,10 +222,12 @@
 							    flags);
 	}
 
-	ctx = i_new(struct fs_list_iterate_context, 1);
+	pool = pool_alloconly_create("mailbox list fs iter", 1024);
+	ctx = p_new(pool, struct fs_list_iterate_context, 1);
+	ctx->ctx.pool = pool;
 	ctx->ctx.list = _list;
 	ctx->ctx.flags = flags;
-	array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5);
+	array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
 
 	ctx->info_pool = pool_alloconly_create("fs list", 1024);
 	ctx->next = fs_list_next;
@@ -232,7 +235,7 @@
 	ctx->info.ns = _list->ns;
 
 	prefix_len = strlen(_list->ns->prefix);
-	i_array_init(&ctx->valid_patterns, 8);
+	p_array_init(&ctx->valid_patterns, pool, 8);
 	for (; *patterns != NULL; patterns++) {
 		/* check that we're not trying to do any "../../" lists */
 		test_pattern = *patterns;
@@ -251,7 +254,7 @@
 				ctx->inbox_match = TRUE;
 				continue;
 			}
-			pattern = i_strdup(*patterns);
+			pattern = p_strdup(pool, *patterns);
 			array_append(&ctx->valid_patterns, &pattern, 1);
 		}
 	}
@@ -262,7 +265,7 @@
 		return &ctx->ctx;
 	}
 	patterns = (const void *)array_idx(&ctx->valid_patterns, 0);
-	ctx->ctx.glob = imap_match_init_multiple(default_pool, patterns, TRUE,
+	ctx->ctx.glob = imap_match_init_multiple(pool, patterns, TRUE,
 						 ctx->sep);
 
 	vpath = _list->ns->prefix;
@@ -300,18 +303,11 @@
 {
 	struct fs_list_iterate_context *ctx =
 		(struct fs_list_iterate_context *)_ctx;
-	char **patterns;
-	unsigned int i, count;
 	int ret = _ctx->failed ? -1 : 0;
 
 	if ((_ctx->flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0)
 		return mailbox_list_subscriptions_iter_deinit(_ctx);
 
-	patterns = array_get_modifiable(&ctx->valid_patterns, &count);
-	for (i = 0; i < count; i++)
-		i_free(patterns[i]);
-	array_free(&ctx->valid_patterns);
-
 	while (ctx->dir != NULL) {
 		struct list_dir_context *dir = ctx->dir;
 
@@ -321,11 +317,7 @@
 
 	if (ctx->info_pool != NULL)
 		pool_unref(&ctx->info_pool);
-	if (_ctx->glob != NULL)
-		imap_match_deinit(&_ctx->glob);
-	array_free(&_ctx->module_contexts);
-	i_free(ctx);
-
+	pool_unref(&_ctx->pool);
 	return ret;
 }
 
@@ -639,7 +631,7 @@
 {
 	struct list_dir_context *dir = ctx->dir;
 	struct dirent *d;
-	char *const *patterns;
+	const char *const *patterns;
 	const char *fname, *path, *p;
 	unsigned int pos;
 	struct stat st;
diff -r 37c2348b67f5 -r b48fb6a08389 src/lib-storage/list/mailbox-list-index-iter.c
--- a/src/lib-storage/list/mailbox-list-index-iter.c	Fri Dec 02 14:23:47 2011 +0200
+++ b/src/lib-storage/list/mailbox-list-index-iter.c	Fri Dec 02 14:49:08 2011 +0200
@@ -14,14 +14,16 @@
 {
 	struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
 	struct mailbox_list_index_iterate_context *ctx;
+	pool_t pool;
 	char ns_sep = mail_namespace_get_sep(list->ns);
 
-	ctx = i_new(struct mailbox_list_index_iterate_context, 1);
+	pool = pool_alloconly_create("mailbox list index iter", 1024);
+	ctx = p_new(pool, struct mailbox_list_index_iterate_context, 1);
+	ctx->ctx.pool = pool;
 	ctx->ctx.list = list;
 	ctx->ctx.flags = flags;
-	ctx->ctx.glob = imap_match_init_multiple(default_pool, patterns,
-						 TRUE, ns_sep);
-	array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5);
+	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;
 
 	if (mailbox_list_index_refresh(ctx->ctx.list) < 0) {
@@ -31,7 +33,7 @@
 	} else {
 		/* listing mailboxes from index */
 		ctx->info.ns = list->ns;
-		ctx->path = str_new(default_pool, 128);
+		ctx->path = str_new(pool, 128);
 		ctx->next_node = ilist->mailbox_tree;
 		ilist->iter_refcount++;
 	}
@@ -162,11 +164,8 @@
 	else {
 		i_assert(ilist->iter_refcount > 0);
 		ilist->iter_refcount--;
-		str_free(&ctx->path);
 	}
 
-	imap_match_deinit(&ctx->ctx.glob);
-	array_free(&ctx->ctx.module_contexts);
-	i_free(ctx);
+	pool_unref(&_ctx->pool);
 	return ret;
 }
diff -r 37c2348b67f5 -r b48fb6a08389 src/lib-storage/list/mailbox-list-maildir-iter.c
--- a/src/lib-storage/list/mailbox-list-maildir-iter.c	Fri Dec 02 14:23:47 2011 +0200
+++ b/src/lib-storage/list/mailbox-list-maildir-iter.c	Fri Dec 02 14:49:08 2011 +0200
@@ -19,7 +19,6 @@
 
 struct maildir_list_iterate_context {
 	struct mailbox_list_iterate_context ctx;
-	pool_t pool;
 
 	const char *dir;
 	char prefix_char;
@@ -419,14 +418,14 @@
 	char ns_sep = mail_namespace_get_sep(_list->ns);
 	int ret;
 
-	pool = pool_alloconly_create("maildir_list", 1024);
+	pool = pool_alloconly_create("mailbox list maildir iter", 1024);
 	ctx = p_new(pool, struct maildir_list_iterate_context, 1);
+	ctx->ctx.pool = pool;
 	ctx->ctx.list = _list;
 	ctx->ctx.flags = flags;
 	ctx->ctx.glob = imap_match_init_multiple(pool, patterns, TRUE, ns_sep);
 	array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
 
-	ctx->pool = pool;
 	ctx->tree_ctx = mailbox_tree_init(ns_sep);
 	ctx->info.ns = _list->ns;
 	ctx->prefix_char = strcmp(_list->name, MAILBOX_LIST_NAME_IMAPDIR) == 0 ?
@@ -470,7 +469,7 @@
 	if (ctx->tree_iter != NULL)
 		mailbox_tree_iterate_deinit(&ctx->tree_iter);
 	mailbox_tree_deinit(&ctx->tree_ctx);
-	pool_unref(&ctx->pool);
+	pool_unref(&ctx->ctx.pool);
 	return ret;
 }
 
diff -r 37c2348b67f5 -r b48fb6a08389 src/lib-storage/list/mailbox-list-none.c
--- a/src/lib-storage/list/mailbox-list-none.c	Fri Dec 02 14:23:47 2011 +0200
+++ b/src/lib-storage/list/mailbox-list-none.c	Fri Dec 02 14:49:08 2011 +0200
@@ -133,13 +133,16 @@
 		    enum mailbox_list_iter_flags flags)
 {
 	struct noop_list_iterate_context *ctx;
+	pool_t pool;
 
-	ctx = i_new(struct noop_list_iterate_context, 1);
+	pool = pool_alloconly_create("mailbox list none iter", 1024);
+	ctx = p_new(pool, struct noop_list_iterate_context, 1);
+	ctx->ctx.pool = pool;
 	ctx->ctx.list = list;
 	ctx->ctx.flags = flags;
-	ctx->ctx.glob = imap_match_init_multiple(default_pool, patterns, TRUE,
+	ctx->ctx.glob = imap_match_init_multiple(pool, patterns, TRUE,
 						 mail_namespace_get_sep(list->ns));
-	array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5);
+	array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
 	if ((list->ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0 &&
 	    imap_match(ctx->ctx.glob, "INBOX") == IMAP_MATCH_YES) {
 		ctx->list_inbox = TRUE;
@@ -152,9 +155,7 @@
 static int
 none_list_iter_deinit(struct mailbox_list_iterate_context *ctx)
 {
-	array_free(&ctx->module_contexts);


More information about the dovecot-cvs mailing list