Mercurial > dovecot > original-hg > dovecot-1.2
diff src/lib-storage/index/index-search.c @ 5527:3b25d89caa93 HEAD
memory leak fixes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 04 Apr 2007 13:28:37 +0300 |
parents | 94bc3fbdecd5 |
children | 6789ba80419b |
line wrap: on
line diff
--- a/src/lib-storage/index/index-search.c Wed Apr 04 13:17:29 2007 +0300 +++ b/src/lib-storage/index/index-search.c Wed Apr 04 13:28:37 2007 +0300 @@ -332,9 +332,10 @@ ret = message_search_init(ctx->search_pool, arg->value.str, ctx->mail_ctx.charset, flags, &arg_ctx); - if (ret > 0) + if (ret > 0) { + arg->context = arg_ctx; return arg_ctx; - + } if (ret == 0) ctx->error = TXT_UNKNOWN_CHARSET; else @@ -905,6 +906,17 @@ return &ctx->mail_ctx; } +static void search_arg_deinit(struct mail_search_arg *arg, + void *context __attr_unused__) +{ + struct message_search_context *search_ctx = arg->context; + + if (search_ctx != NULL) { + message_search_deinit(&search_ctx); + arg->context = NULL; + } +} + int index_storage_search_deinit(struct mail_search_context *_ctx) { struct index_search_context *ctx = (struct index_search_context *)_ctx; @@ -917,6 +929,10 @@ "%s", ctx->error); } + mail_search_args_reset(ctx->mail_ctx.args, FALSE); + (void)mail_search_args_foreach(ctx->mail_ctx.args, + search_arg_deinit, NULL); + if (ctx->search_pool != NULL) pool_unref(ctx->search_pool);