Mercurial > dovecot > original-hg > dovecot-2.2
changeset 13792:b48fb6a08389
lib-storage: Added pool to struct mailbox_list_iterate_context.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 02 Dec 2011 14:49:08 +0200 |
parents | 37c2348b67f5 |
children | ee783a878120 |
files | src/lib-storage/index/imapc/imapc-list.c src/lib-storage/index/shared/shared-list.c src/lib-storage/list/mailbox-list-fs-iter.c src/lib-storage/list/mailbox-list-index-iter.c src/lib-storage/list/mailbox-list-maildir-iter.c src/lib-storage/list/mailbox-list-none.c src/lib-storage/list/mailbox-list-subscriptions.c src/lib-storage/mailbox-list-private.h src/plugins/acl/acl-mailbox-list.c |
diffstat | 9 files changed, 59 insertions(+), 67 deletions(-) [+] |
line wrap: on
line diff
--- 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; }
--- 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; }
--- 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;
--- 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; }
--- 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; }
--- 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); - imap_match_deinit(&ctx->glob); - i_free(ctx); + pool_unref(&ctx->pool); return 0; }
--- a/src/lib-storage/list/mailbox-list-subscriptions.c Fri Dec 02 14:23:47 2011 +0200 +++ b/src/lib-storage/list/mailbox-list-subscriptions.c Fri Dec 02 14:49:08 2011 +0200 @@ -211,14 +211,16 @@ enum mailbox_list_iter_flags flags) { struct subscriptions_mailbox_list_iterate_context *ctx; + pool_t pool; char sep = mail_namespace_get_sep(list->ns); - ctx = i_new(struct subscriptions_mailbox_list_iterate_context, 1); + pool = pool_alloconly_create("mailbox list subscriptions iter", 1024); + ctx = p_new(pool, struct subscriptions_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, - TRUE, sep); - array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5); + ctx->ctx.glob = imap_match_init_multiple(pool, patterns, TRUE, sep); + array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5); ctx->tree = mailbox_tree_init(sep); mailbox_list_subscriptions_fill(&ctx->ctx, ctx->tree); @@ -292,9 +294,6 @@ mailbox_tree_iterate_deinit(&ctx->iter); mailbox_tree_deinit(&ctx->tree); - if (_ctx->glob != NULL) - imap_match_deinit(&_ctx->glob); - array_free(&_ctx->module_contexts); - i_free(ctx); + pool_unref(&_ctx->pool); return ret; }
--- a/src/lib-storage/mailbox-list-private.h Fri Dec 02 14:23:47 2011 +0200 +++ b/src/lib-storage/mailbox-list-private.h Fri Dec 02 14:49:08 2011 +0200 @@ -141,6 +141,7 @@ struct mailbox_list_iterate_context { struct mailbox_list *list; + pool_t pool; enum mailbox_list_iter_flags flags; bool failed;
--- a/src/plugins/acl/acl-mailbox-list.c Fri Dec 02 14:23:47 2011 +0200 +++ b/src/plugins/acl/acl-mailbox-list.c Fri Dec 02 14:49:08 2011 +0200 @@ -162,17 +162,20 @@ { struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(list); struct acl_mailbox_list_iterate_context *ctx; + pool_t pool; const char *p; unsigned int i; bool inboxcase; - ctx = i_new(struct acl_mailbox_list_iterate_context, 1); + pool = pool_alloconly_create("mailbox list acl iter", 1024); + ctx = p_new(pool, struct acl_mailbox_list_iterate_context, 1); + ctx->ctx.pool = pool; ctx->ctx.list = list; ctx->ctx.flags = flags; inboxcase = (list->ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0; ctx->sep = mail_namespace_get_sep(list->ns); - ctx->glob = imap_match_init_multiple(default_pool, patterns, + ctx->glob = imap_match_init_multiple(pool, patterns, inboxcase, ctx->sep); /* see if all patterns have only a single '*' and it's at the end. we can use it to do some optimizations. */ @@ -410,9 +413,7 @@ ret = -1; if (ctx->lookup_boxes != NULL) mailbox_tree_deinit(&ctx->lookup_boxes); - if (ctx->glob != NULL) - imap_match_deinit(&ctx->glob); - i_free(ctx); + pool_unref(&_ctx->pool); return ret; }