From: Timo Sirainen Date: Thu, 28 Jan 2016 15:03:15 +0000 (+0200) Subject: doveadm: All commands iterating mails stop now if doveadm has been killed. X-Git-Tag: 2.2.22.rc1~258 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=956a62e2b68e1c042bf2bcddd6f4ba79fec9745a;p=thirdparty%2Fdovecot%2Fcore.git doveadm: All commands iterating mails stop now if doveadm has been killed. --- diff --git a/src/doveadm/doveadm-mail-iter.c b/src/doveadm/doveadm-mail-iter.c index b7d833e15d..1e34d083a4 100644 --- a/src/doveadm/doveadm-mail-iter.c +++ b/src/doveadm/doveadm-mail-iter.c @@ -14,6 +14,7 @@ struct doveadm_mail_iter { struct mailbox *box; struct mailbox_transaction_context *t; struct mail_search_context *search_ctx; + bool killed; }; int doveadm_mail_iter_init(struct doveadm_mail_cmd_context *ctx, @@ -109,6 +110,10 @@ doveadm_mail_iter_deinit_full(struct doveadm_mail_iter **_iter, } if (ret < 0) doveadm_mail_failed_mailbox(iter->ctx, iter->box); + else if (iter->killed) { + iter->ctx->exit_code = EX_TEMPFAIL; + ret = -1; + } if (!keep_box) mailbox_free(&iter->box); i_free(iter); @@ -142,6 +147,10 @@ bool doveadm_mail_iter_next(struct doveadm_mail_iter *iter, { if (iter->search_ctx == NULL) return FALSE; + if (doveadm_is_killed()) { + iter->killed = TRUE; + return FALSE; + } return mailbox_search_next(iter->search_ctx, mail_r); }