From: Andre Noll Date: Mon, 13 Jun 2016 15:54:37 +0000 (+0200) Subject: Fix rsync exit handling in create mode. X-Git-Tag: v0.1.7~15 X-Git-Url: http://git.tuebingen.mpg.de/?p=dss.git;a=commitdiff_plain;h=0f2b297697d2c5d0ab9ee71d51c2e47fb4508aba Fix rsync exit handling in create mode. The logic in handle_rsync_exit() is horribly broken in case dss is run in create mode and the rsync process terminates unsuccessfully. First we claim to restart rsync, which is wrong. Next we call the post-create hook despite the documentation says that this hook is only run on *successful* termination. Finally, we dereference a NULL pointer to print the path of the snapshot. Fortunately, all three issues are easy to fix by special casing create mode in handle_rsync_exit(). --- diff --git a/dss.c b/dss.c index bdbdd04..0bc8913 100644 --- a/dss.c +++ b/dss.c @@ -862,6 +862,10 @@ static int handle_rsync_exit(int status) if (es != 0 && es != 24) { DSS_WARNING_LOG(("rsync exit code %d, error count %d\n", es, ++num_consecutive_rsync_errors)); + if (conf.create_given) { + ret = -E_BAD_EXIT_CODE; + goto out; + } if (num_consecutive_rsync_errors > conf.max_rsync_errors_arg) { ret = -E_TOO_MANY_RSYNC_ERRORS; snapshot_creation_status = HS_READY;