]> git.tuebingen.mpg.de Git - dss.git/blobdiff - dss.c
Skip unnecessary check whether next snapshot is due.
[dss.git] / dss.c
diff --git a/dss.c b/dss.c
index 347268e23a22e5db6e2386ba046045ea4266d475..e4415f5f7c4d4a789f508899e715d9492bb387ee 100644 (file)
--- a/dss.c
+++ b/dss.c
@@ -250,8 +250,7 @@ static int pre_remove_hook(struct snapshot *s, const char *why)
        cmd = make_message("%s %s/%s", conf.pre_remove_hook_arg,
                conf.dest_dir_arg, s->name);
        DSS_DEBUG_LOG("executing %s\n", cmd);
-       ret = dss_exec_cmdline_pid(&remove_pid,
-               conf.pre_remove_hook_arg, fds);
+       ret = dss_exec_cmdline_pid(&remove_pid, cmd, fds);
        free(cmd);
        if (ret < 0)
                return ret;
@@ -554,6 +553,7 @@ static void stop_create_process(void)
 {
        if (!create_pid || create_process_stopped)
                return;
+       DSS_INFO_LOG("suspending create process %d\n", (int)create_pid);
        kill(SIGSTOP, create_pid);
        create_process_stopped = 1;
 }
@@ -562,6 +562,7 @@ static void restart_create_process(void)
 {
        if (!create_pid || !create_process_stopped)
                return;
+       DSS_INFO_LOG("resuming create process %d\n", (int)create_pid);
        kill (SIGCONT, create_pid);
        create_process_stopped = 0;
 }
@@ -778,18 +779,22 @@ static int handle_sigchld(void)
        if (pid == create_pid) {
                switch (snapshot_creation_status) {
                case HS_PRE_RUNNING:
-                       return handle_pre_create_hook_exit(status);
+                       ret = handle_pre_create_hook_exit(status);
+                       break;
                case HS_RUNNING:
-                       return handle_rsync_exit(status);
+                       ret = handle_rsync_exit(status);
+                       break;
                case HS_POST_RUNNING:
                        snapshot_creation_status = HS_READY;
-                       return 1;
+                       ret = 1;
+                       break;
                default:
                        DSS_EMERG_LOG("BUG: create can't die in status %d\n",
                                snapshot_creation_status);
                        return -E_BUG;
                }
                create_pid = 0;
+               return ret;
        }
        if (pid == remove_pid) {
                ret = handle_remove_exit(status);
@@ -1074,7 +1079,6 @@ static int select_loop(void)
                }
                FD_ZERO(&rfds);
                FD_SET(signal_pipe, &rfds);
-               DSS_DEBUG_LOG("tvp: %p, tv_sec : %lu\n", tvp, (long unsigned) tv.tv_sec);
                ret = dss_select(signal_pipe + 1, &rfds, NULL, tvp);
                if (ret < 0)
                        goto out;
@@ -1118,9 +1122,14 @@ static int select_loop(void)
                case HS_POST_RUNNING:
                        continue;
                case HS_PRE_SUCCESS:
-                       free_rsync_argv(rsync_argv);
-                       create_rsync_argv(&rsync_argv, &current_snapshot_creation_time);
-                       /* fall through */
+                       if (!name_of_reference_snapshot) {
+                               free_rsync_argv(rsync_argv);
+                               create_rsync_argv(&rsync_argv, &current_snapshot_creation_time);
+                       }
+                       ret = create_snapshot(rsync_argv);
+                       if (ret < 0)
+                               goto out;
+                       continue;
                case HS_NEEDS_RESTART:
                        if (!next_snapshot_is_due())
                                continue;