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);