aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2011-10-06 23:23:15 +0000
committerRob Austein <sra@hactrn.net>2011-10-06 23:23:15 +0000
commitcd06d1323877db74d658fecc49eef6a8b5e373c7 (patch)
tree36b5e04746f05f128e2f1006ac2bca0bf182b766
parent50b51d35e66386db91884752ea94b6655ab6ecd0 (diff)
Recheck cache just before starting rsync, in case another rsync
retrieved the data we want while this rsync was queued. Fixes #98. svn path=/rcynic/rcynic.c; revision=4018
-rw-r--r--rcynic/rcynic.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/rcynic/rcynic.c b/rcynic/rcynic.c
index 2cc37456..97a45d46 100644
--- a/rcynic/rcynic.c
+++ b/rcynic/rcynic.c
@@ -1902,6 +1902,15 @@ static void rsync_run(const rcynic_ctx_t *rc,
assert(rc && ctx && ctx->pid == 0 && ctx->state != rsync_state_running && rsync_runable(rc, ctx));
+ if (rsync_cached_uri(rc, &ctx->uri)) {
+ logmsg(rc, log_verbose, "Late rsync cache hit for %s", ctx->uri.s);
+ if (ctx->handler)
+ ctx->handler(rc, ctx, rsync_status_done, &ctx->uri, ctx->wsk);
+ (void) sk_rsync_ctx_t_delete_ptr(rc->rsync_queue, ctx);
+ free(ctx);
+ return;
+ }
+
assert(rsync_count_running(rc) < rc->max_parallel_fetches);
logmsg(rc, log_telemetry, "Fetching %s", ctx->uri.s);