changeset 7245:dbb7f65e6307 HEAD

Memory leak fixes
author Timo Sirainen <tss@iki.fi>
date Fri, 15 Feb 2008 13:25:47 +0200
parents 673132f88be3
children 599a9c679ee2
files src/lib-mail/message-parser.c src/lib-storage/mail-storage.c src/lib-storage/mailbox-list-private.h src/lib-storage/mailbox-list.c
diffstat 4 files changed, 21 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-mail/message-parser.c	Fri Feb 15 13:23:18 2008 +0200
+++ b/src/lib-mail/message-parser.c	Fri Feb 15 13:25:47 2008 +0200
@@ -733,6 +733,8 @@
 	*_ctx = NULL;
 	*parts_r = ctx->parts;
 
+	if (ctx->hdr_parser_ctx != NULL)
+		message_parse_header_deinit(&ctx->hdr_parser_ctx);
 	i_stream_unref(&ctx->input);
 	pool_unref(&ctx->parser_pool);
 	return ret;
--- a/src/lib-storage/mail-storage.c	Fri Feb 15 13:23:18 2008 +0200
+++ b/src/lib-storage/mail-storage.c	Fri Feb 15 13:25:47 2008 +0200
@@ -35,6 +35,7 @@
 
 void mail_storage_init(void)
 {
+	mailbox_lists_init();
 	i_array_init(&storages, 8);
 }
 
@@ -42,6 +43,7 @@
 {
 	if (array_is_created(&storages))
 		array_free(&storages);
+	mailbox_lists_deinit();
 }
 
 void mail_storage_class_register(struct mail_storage *storage_class)
--- a/src/lib-storage/mailbox-list-private.h	Fri Feb 15 13:23:18 2008 +0200
+++ b/src/lib-storage/mailbox-list-private.h	Fri Feb 15 13:25:47 2008 +0200
@@ -96,6 +96,9 @@
 
 extern void (*hook_mailbox_list_created)(struct mailbox_list *list);
 
+void mailbox_lists_init(void);
+void mailbox_lists_deinit(void);
+
 int mailbox_list_settings_parse(const char *data,
 				struct mailbox_list_settings *set,
 				const char **layout, const char **alt_dir_r,
--- a/src/lib-storage/mailbox-list.c	Fri Feb 15 13:23:18 2008 +0200
+++ b/src/lib-storage/mailbox-list.c	Fri Feb 15 13:25:47 2008 +0200
@@ -33,6 +33,16 @@
 
 static ARRAY_DEFINE(mailbox_list_drivers, const struct mailbox_list *);
 
+void mailbox_lists_init(void)
+{
+	i_array_init(&mailbox_list_drivers, 4);
+}
+
+void mailbox_lists_deinit(void)
+{
+	array_free(&mailbox_list_drivers);
+}
+
 static bool mailbox_list_driver_find(const char *name, unsigned int *idx_r)
 {
 	const struct mailbox_list *const *drivers;
@@ -50,15 +60,11 @@
 
 void mailbox_list_register(const struct mailbox_list *list)
 {
-	if (!array_is_created(&mailbox_list_drivers))
-		i_array_init(&mailbox_list_drivers, 4);
-	else {
-		unsigned int idx;
+	unsigned int idx;
 
-		if (mailbox_list_driver_find(list->name, &idx)) {
-			i_fatal("mailbox_list_register(%s): duplicate driver",
-				list->name);
-		}
+	if (mailbox_list_driver_find(list->name, &idx)) {
+		i_fatal("mailbox_list_register(%s): duplicate driver",
+			list->name);
 	}
 
 	array_append(&mailbox_list_drivers, &list, 1);
@@ -73,9 +79,6 @@
 			list->name);
 	}
 	array_delete(&mailbox_list_drivers, idx, 1);
-
-	if (array_count(&mailbox_list_drivers) == 0)
-		array_free(&mailbox_list_drivers);
 }
 
 int mailbox_list_alloc(const char *driver, struct mailbox_list **list_r,