]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: Stop running if SIGINT/SIGTERM is received.
authorTimo Sirainen <tss@iki.fi>
Fri, 8 May 2015 11:47:26 +0000 (14:47 +0300)
committerTimo Sirainen <tss@iki.fi>
Fri, 8 May 2015 11:47:26 +0000 (14:47 +0300)
src/doveadm/doveadm-dsync.c
src/doveadm/doveadm-mail.c
src/doveadm/doveadm-mail.h

index 90d0c8ec903e9f5e2f7b9e0afc5efafc2bb6c01c..f346e58f2db13c1c0dc584250e2e0b2f38016be6 100644 (file)
@@ -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,
index 42dad4dac6afd94d1202996d3fef8631291b74df..3b3e827a6c7bce471237fdaf58f85fdbf35ea5a3 100644 (file)
@@ -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)
 {
index 0cba71a66d302608aaa9f1a3ede36b1b0d1e0735..327bc545280a696001a9f55045b9b1d2524e269a 100644 (file)
@@ -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);