changeset 19605:d80976d7fec0

doveadm: Make sure all mail storage hooks are freed at deinit.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 22 Jan 2016 16:48:53 +0200
parents c996bc091c6b
children 487036a4b545
files src/doveadm/doveadm-mail.c src/lib-storage/mail-storage-hooks.c
diffstat 2 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/doveadm/doveadm-mail.c	Mon Jan 18 15:50:23 2016 +0200
+++ b/src/doveadm/doveadm-mail.c	Fri Jan 22 16:48:53 2016 +0200
@@ -17,6 +17,7 @@
 #include "mail-storage.h"
 #include "mail-storage-settings.h"
 #include "mail-storage-service.h"
+#include "mail-storage-hooks.h"
 #include "mail-search-build.h"
 #include "mail-search-parser.h"
 #include "mailbox-list-iter.h"
@@ -843,5 +844,6 @@
 
 void doveadm_mail_deinit(void)
 {
+	mail_storage_hooks_deinit();
 	array_free(&doveadm_mail_cmds);
 }
--- a/src/lib-storage/mail-storage-hooks.c	Mon Jan 18 15:50:23 2016 +0200
+++ b/src/lib-storage/mail-storage-hooks.c	Fri Jan 22 16:48:53 2016 +0200
@@ -49,8 +49,14 @@
 
 void mail_storage_hooks_deinit(void)
 {
-	array_free(&internal_hooks);
-	array_free(&module_hooks);
+	/* allow calling this even if mail_storage_hooks_init() hasn't been
+	   called, because e.g. doveadm plugins could call
+	   mail_storage_hooks_add() even though mail storage is never
+	   initialized. */
+	if (array_is_created(&internal_hooks))
+		array_free(&internal_hooks);
+	if (array_is_created(&module_hooks))
+		array_free(&module_hooks);
 }
 
 void mail_storage_hooks_add(struct module *module,