changed1 = changed2 = TRUE;
while (brain1_running || brain2_running) {
if (dsync_brain_has_failed(brain) ||
- dsync_brain_has_failed(brain2))
+ dsync_brain_has_failed(brain2) ||
+ doveadm_is_killed())
break;
i_assert(changed1 || changed2);
brain2_running = dsync_brain_run(brain2, &changed2);
}
*changes_during_sync_r = dsync_brain_has_unexpected_changes(brain2);
- return dsync_brain_deinit(&brain2, mail_error_r);
+ if (dsync_brain_deinit(&brain2, mail_error_r) < 0)
+ return -1;
+ return doveadm_is_killed() ? -1 : 0;
}
static void cmd_dsync_wait_remote(struct dsync_cmd_context *ctx,
static int killed_signo = 0;
+bool doveadm_is_killed(void)
+{
+ return killed_signo != 0;
+}
+
void doveadm_mail_failed_error(struct doveadm_mail_cmd_context *ctx,
enum mail_error error)
{
extern struct doveadm_mail_cmd_module_register doveadm_mail_cmd_module_register;
extern char doveadm_mail_cmd_hide;
+bool doveadm_is_killed(void);
+
bool doveadm_mail_try_run(const char *cmd_name, int argc, char *argv[]);
void doveadm_mail_register_cmd(const struct doveadm_mail_cmd *cmd);
const struct doveadm_mail_cmd *doveadm_mail_cmd_find(const char *cmd_name);