diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index 2fe404d5fa..fec3814f98 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -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); } diff --git a/src/lib-storage/mail-storage-hooks.c b/src/lib-storage/mail-storage-hooks.c index a6e6939a72..7b181d756d 100644 --- a/src/lib-storage/mail-storage-hooks.c +++ b/src/lib-storage/mail-storage-hooks.c @@ -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,