]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Make sure all mail storage hooks are freed at deinit.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 22 Jan 2016 14:48:53 +0000 (16:48 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 22 Jan 2016 14:49:56 +0000 (16:49 +0200)
src/doveadm/doveadm-mail.c
src/lib-storage/mail-storage-hooks.c

index 2fe404d5faed8340f102aff2bf84de2034716705..fec3814f98409ac6f40f4fc207269676e0f25b3a 100644 (file)
@@ -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_init(void)
 
 void doveadm_mail_deinit(void)
 {
+       mail_storage_hooks_deinit();
        array_free(&doveadm_mail_cmds);
 }
index a6e6939a723ec503037d760552ae443448b1e4fd..7b181d756d3415e3b8cd6a0ec7bf90450f09ab81 100644 (file)
@@ -49,8 +49,14 @@ void mail_storage_hooks_init(void)
 
 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,