dovecot: Memory leak fixes

dovecot at dovecot.org dovecot at dovecot.org
Fri Feb 15 13:25:30 EET 2008


details:   http://hg.dovecot.org/dovecot/rev/7e93b52dbada
changeset: 7244:7e93b52dbada
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Feb 15 13:25:46 2008 +0200
description:
Memory leak fixes

diffstat:

4 files changed, 22 insertions(+), 12 deletions(-)
src/lib-mail/message-parser.c          |    2 ++
src/lib-storage/mail-storage.c         |    2 ++
src/lib-storage/mailbox-list-private.h |    3 +++
src/lib-storage/mailbox-list.c         |   27 +++++++++++++++------------

diffs (95 lines):

diff -r 97b8ea4dd200 -r 7e93b52dbada src/lib-mail/message-parser.c
--- a/src/lib-mail/message-parser.c	Fri Feb 15 13:23:17 2008 +0200
+++ b/src/lib-mail/message-parser.c	Fri Feb 15 13:25:46 2008 +0200
@@ -733,6 +733,8 @@ int message_parser_deinit(struct message
 	*_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;
diff -r 97b8ea4dd200 -r 7e93b52dbada src/lib-storage/mail-storage.c
--- a/src/lib-storage/mail-storage.c	Fri Feb 15 13:23:17 2008 +0200
+++ b/src/lib-storage/mail-storage.c	Fri Feb 15 13:25:46 2008 +0200
@@ -35,6 +35,7 @@ static ARRAY_DEFINE(storages, struct mai
 
 void mail_storage_init(void)
 {
+	mailbox_lists_init();
 	i_array_init(&storages, 8);
 }
 
@@ -42,6 +43,7 @@ void mail_storage_deinit(void)
 {
 	if (array_is_created(&storages))
 		array_free(&storages);
+	mailbox_lists_deinit();
 }
 
 void mail_storage_class_register(struct mail_storage *storage_class)
diff -r 97b8ea4dd200 -r 7e93b52dbada src/lib-storage/mailbox-list-private.h
--- a/src/lib-storage/mailbox-list-private.h	Fri Feb 15 13:23:17 2008 +0200
+++ b/src/lib-storage/mailbox-list-private.h	Fri Feb 15 13:25:46 2008 +0200
@@ -96,6 +96,9 @@ extern struct mailbox_list_module_regist
 
 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,
diff -r 97b8ea4dd200 -r 7e93b52dbada src/lib-storage/mailbox-list.c
--- a/src/lib-storage/mailbox-list.c	Fri Feb 15 13:23:17 2008 +0200
+++ b/src/lib-storage/mailbox-list.c	Fri Feb 15 13:25:46 2008 +0200
@@ -33,6 +33,16 @@ void (*hook_mailbox_list_created)(struct
 
 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 @@ static bool mailbox_list_driver_find(con
 
 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;
-
-		if (mailbox_list_driver_find(list->name, &idx)) {
-			i_fatal("mailbox_list_register(%s): duplicate driver",
-				list->name);
-		}
+	unsigned int idx;
+
+	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 @@ void mailbox_list_unregister(const struc
 			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,


More information about the dovecot-cvs mailing list