From: Timo Sirainen Date: Sun, 19 Feb 2017 00:03:08 +0000 (+0200) Subject: doveadm: Add explicit mail_storage_init/deinit() calls X-Git-Tag: 2.3.0.rc1~2066 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4adb461ce12bf578d2d70806b205cf3cbf1a51d;p=thirdparty%2Fdovecot%2Fcore.git 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. --- diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index dd03b5cf0b..20dfb6a194 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -920,11 +920,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); }