From 3413b38df881a8c712ae4a88cfe72bbfed2a7b37 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sun, 19 Feb 2017 02:03:08 +0200 Subject: [PATCH] doveadm: Add explicit mail_storage_init/deinit() calls This mainly prevents losing hooks that were registered by doveadm plugins. Otherwise what happens is: - mail_plugins are unloaded and they unregister their hooks - doveadm plugins (e.g. doveadm_sieve) are NOT unloaded - mail_storage_deinit() frees all the registered hooks - next mail_storage_init() initializes all new hooks - All mail_plugins are loaded and they register again their hooks - doveadm plugins are NOT re-loaded or re-initialized, so their existing hooks were lost. --- src/doveadm/doveadm-mail.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index ec7f6524d7..bd3ceb1634 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -921,11 +921,14 @@ void doveadm_mail_init(void) doveadm_settings->mail_plugin_dir, doveadm_settings->mail_plugins, &mod_set); + /* keep mail_storage_init() referenced so that its _deinit() doesn't + try to free doveadm plugins' hooks too early. */ + mail_storage_init(); } void doveadm_mail_deinit(void) { - mail_storage_hooks_deinit(); + mail_storage_deinit(); array_free(&doveadm_mail_cmds); } -- 2.47.3