]> git.tuebingen.mpg.de Git - dss.git/blobdiff - dss.c
Don't check whether hooks are given.
[dss.git] / dss.c
diff --git a/dss.c b/dss.c
index 53707bd1cbd6fd0da5197096dc484466ba63805f..c996d47313c4673010e87f6042c9009901224b69 100644 (file)
--- a/dss.c
+++ b/dss.c
@@ -214,10 +214,6 @@ static int pre_create_hook(void)
        assert(snapshot_creation_status == HS_READY);
        /* make sure that the next snapshot time will be recomputed */
        invalidate_next_snapshot_time();
-       if (!conf.pre_create_hook_given) {
-               snapshot_creation_status = HS_PRE_SUCCESS;
-               return 0;
-       }
        DSS_DEBUG_LOG("executing %s\n", conf.pre_create_hook_arg);
        ret = dss_exec_cmdline_pid(&create_pid,
                conf.pre_create_hook_arg, fds);
@@ -243,10 +239,6 @@ static int pre_remove_hook(struct snapshot *s, const char *why)
        *snapshot_currently_being_removed = *s;
        snapshot_currently_being_removed->name = dss_strdup(s->name);
 
-       if (!conf.pre_remove_hook_given) {
-               snapshot_removal_status = HS_PRE_SUCCESS;
-               return 0;
-       }
        cmd = make_message("%s %s/%s", conf.pre_remove_hook_arg,
                conf.dest_dir_arg, s->name);
        DSS_DEBUG_LOG("executing %s\n", cmd);
@@ -502,11 +494,6 @@ static int post_create_hook(void)
        int ret, fds[3] = {0, 0, 0};
        char *cmd;
 
-       if (!conf.post_create_hook_given) {
-               create_pid = 0;
-               snapshot_creation_status = HS_READY;
-               return 0;
-       }
        cmd = make_message("%s %s/%s", conf.post_create_hook_arg,
                conf.dest_dir_arg, path_to_last_complete_snapshot);
        DSS_NOTICE_LOG("executing %s\n", cmd);
@@ -526,10 +513,6 @@ static int post_remove_hook(void)
 
        assert(s);
 
-       if (!conf.post_remove_hook_given) {
-               snapshot_removal_status = HS_READY;
-               return 0;
-       }
        cmd = make_message("%s %s/%s", conf.post_remove_hook_arg,
                conf.dest_dir_arg, s->name);
        DSS_NOTICE_LOG("executing %s\n", cmd);
@@ -553,6 +536,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;
 }
@@ -561,6 +545,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;
 }
@@ -637,10 +622,7 @@ static int handle_rm_exit(int status)
                snapshot_removal_status = HS_READY;
                return -E_BAD_EXIT_CODE;
        }
-       if (conf.post_remove_hook_given)
-               snapshot_removal_status = HS_SUCCESS;
-       else
-               snapshot_removal_status = HS_READY;
+       snapshot_removal_status = HS_SUCCESS;
        return 1;
 }
 
@@ -777,18 +759,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);
@@ -1073,7 +1059,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;
@@ -1146,8 +1131,6 @@ static void exit_hook(int exit_code)
        char *argv[] = {conf.exit_hook_arg, dss_strerror(-exit_code), NULL};
        pid_t pid;
 
-       if (!conf.exit_hook_given)
-               return;
        DSS_NOTICE_LOG("executing %s %s\n", argv[0], argv[1]);
        dss_exec(&pid, conf.exit_hook_arg, argv, fds);
 }