From: Timo Sirainen Date: Fri, 8 May 2015 11:47:26 +0000 (+0300) Subject: dsync: Stop running if SIGINT/SIGTERM is received. X-Git-Tag: 2.2.17.rc1~75 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=344bb4abc3acb63d04131cb63f1503a6ca01fb40;p=thirdparty%2Fdovecot%2Fcore.git dsync: Stop running if SIGINT/SIGTERM is received. --- diff --git a/src/doveadm/doveadm-dsync.c b/src/doveadm/doveadm-dsync.c index 90d0c8ec90..f346e58f2d 100644 --- a/src/doveadm/doveadm-dsync.c +++ b/src/doveadm/doveadm-dsync.c @@ -383,7 +383,8 @@ cmd_dsync_run_local(struct dsync_cmd_context *ctx, struct mail_user *user, 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); @@ -391,7 +392,9 @@ cmd_dsync_run_local(struct dsync_cmd_context *ctx, struct mail_user *user, 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, diff --git a/src/doveadm/doveadm-mail.c b/src/doveadm/doveadm-mail.c index 42dad4dac6..3b3e827a6c 100644 --- a/src/doveadm/doveadm-mail.c +++ b/src/doveadm/doveadm-mail.c @@ -40,6 +40,11 @@ char doveadm_mail_cmd_hide = '\0'; 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) { diff --git a/src/doveadm/doveadm-mail.h b/src/doveadm/doveadm-mail.h index 0cba71a66d..327bc54528 100644 --- a/src/doveadm/doveadm-mail.h +++ b/src/doveadm/doveadm-mail.h @@ -111,6 +111,8 @@ extern void (*hook_doveadm_mail_init)(struct doveadm_mail_cmd_context *ctx); 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);