diff options
author | Rob Austein <sra@hactrn.net> | 2011-10-06 23:23:15 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2011-10-06 23:23:15 +0000 |
commit | cd06d1323877db74d658fecc49eef6a8b5e373c7 (patch) | |
tree | 36b5e04746f05f128e2f1006ac2bca0bf182b766 | |
parent | 50b51d35e66386db91884752ea94b6655ab6ecd0 (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.c | 9 |
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); |