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);
*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);
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);
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);
{
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;
}
{
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;
}
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;
}
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);
}
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;
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);
}