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.
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);
}