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