diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 74caad2..5521237 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -3410,7 +3410,8 @@ PRESERVE_NONE void done_common_prefix_iter(CheckJob *job, job->remaining = job->begin; - auto c = getChild(job->n, job->remaining[0]); + auto [c, maxV] = getChildAndMaxVersion(job->n, job->remaining[0]); + job->maxV = maxV; Node *child = c; if (child == nullptr) { auto c = getChildGeq(job->n, job->remaining[0]); @@ -3463,7 +3464,7 @@ PRESERVE_NONE void left_side_iter(CheckJob *job, CheckContext *context) { job->setResult(false); MUSTTAIL return complete(job, context); } - if (maxVersion(n) > job->readVersion) { + if (job->maxV > job->readVersion) { job->setResult(false); MUSTTAIL return complete(job, context); } @@ -3488,7 +3489,7 @@ PRESERVE_NONE void left_side_iter(CheckJob *job, CheckContext *context) { job->setResult(false); MUSTTAIL return complete(job, context); } - if (maxVersion(n) > job->readVersion) { + if (job->maxV > job->readVersion) { job->setResult(false); MUSTTAIL return complete(job, context); } @@ -3499,8 +3500,13 @@ PRESERVE_NONE void left_side_iter(CheckJob *job, CheckContext *context) { ++context->tls->range_read_iterations_accum; + if (job->maxV <= job->readVersion) { + job->continuation = done_left_side_iter; + MUSTTAIL return job->continuation(job, context); + } + if (job->remaining.size() == 0) { - if (maxVersion(n) > job->readVersion) { + if (job->maxV > job->readVersion) { job->setResult(false); MUSTTAIL return complete(job, context); } else { @@ -3515,7 +3521,8 @@ PRESERVE_NONE void left_side_iter(CheckJob *job, CheckContext *context) { MUSTTAIL return complete(job, context); } - auto c = getChild(n, job->remaining[0]); + auto [c, maxV] = getChildAndMaxVersion(job->n, job->remaining[0]); + job->maxV = maxV; Node *child = c; if (child == nullptr) { auto c = getChildGeq(n, job->remaining[0]);