Mercurial > dovecot > core-2.2
changeset 12796:60daca1d28c7
doveadm: Unload plugins only after calling command's deinit() function.
This fixes a crash on deinit when using a plugin that hooks into
user.deinit().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 28 Feb 2011 18:57:21 +0200 |
parents | f7cb34c45864 |
children | 2ab52f478b72 |
files | src/doveadm/doveadm-mail.c |
diffstat | 1 files changed, 5 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/doveadm-mail.c Mon Feb 28 17:50:41 2011 +0200 +++ b/src/doveadm/doveadm-mail.c Mon Feb 28 18:57:21 2011 +0200 @@ -248,7 +248,6 @@ i_fatal("%s", error); else if (ret == 0) i_fatal("User doesn't exist"); - mail_storage_service_deinit(&ctx->storage_service); } static void sig_die(const siginfo_t *si, void *context ATTR_UNUSED) @@ -319,7 +318,6 @@ i_set_failure_prefix("doveadm: "); if (ret < 0) i_error("Failed to iterate through some users"); - mail_storage_service_deinit(&ctx->storage_service); } static void @@ -420,14 +418,17 @@ service_flags |= MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP; doveadm_mail_all_users(ctx, argv, wildcard_user, service_flags); } + if (ctx->search_args != NULL) + mail_search_args_unref(&ctx->search_args); doveadm_mail_server_flush(); ctx->v.deinit(ctx); doveadm_print_flush(); + /* service deinit unloads mail plugins, so do it late */ + mail_storage_service_deinit(&ctx->storage_service); + if (ctx->failed) exit(FATAL_DEFAULT); - if (ctx->search_args != NULL) - mail_search_args_unref(&ctx->search_args); pool_unref(&ctx->pool); }