]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Add explicit mail_storage_init/deinit() calls
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sun, 19 Feb 2017 00:03:08 +0000 (02:03 +0200)
committerGitLab <gitlab@git.dovecot.net>
Sun, 19 Feb 2017 14:11:14 +0000 (16:11 +0200)
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

index dd03b5cf0be159af0c116f1624276d356be8555c..20dfb6a194cad0454e080977c7be30f033c44a05 100644 (file)
@@ -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);
 }