Although we set the next snapshot time to now + 60 seconds in case
rsync exits with exit status 12 or 13, we miss to check this time
barrier in case the snapshot creation status is HS_NEEDS_RESTART.
Fix this by adding an additional check in the switch() statement
of the select loop. As this change would trigger the assertion
snapshot_creation_status == HS_READY
in next_snapshot_is_due(), remove this assertion.
{
int64_t now = get_current_time();
- assert(snapshot_creation_status == HS_READY);
if (!next_snapshot_time_is_valid())
next_snapshot_time = compute_next_snapshot_time();
if (next_snapshot_time <= now) {
create_rsync_argv(&rsync_argv, ¤t_snapshot_creation_time);
/* fall through */
case HS_NEEDS_RESTART:
+ if (!next_snapshot_is_due())
+ continue;
ret = create_snapshot(rsync_argv);
if (ret < 0)
goto out;