offset, id);
if (handleReportInternally(t, scratch, id, offset)) {
- return MO_CONTINUE_MATCHING;
+ return can_stop_matching(scratch) ? MO_HALT_MATCHING
+ : MO_CONTINUE_MATCHING;
}
updateLastMatchOffset(tctxt, offset);
const struct RoseEngine *t = scratch->core_info.rose;
if (handleReportInternally(t, scratch, id, offset)) {
- return MO_CONTINUE_MATCHING;
+ return can_stop_matching(scratch) ? MO_HALT_MATCHING
+ : MO_CONTINUE_MATCHING;
}
return tctxt->cb(offset, id, scratch);
hwlmcb_rv_t rv = roseCatchUpMPV(t, report_ok_loc, scratch);
if (rv != HWLM_CONTINUE_MATCHING) {
+ DEBUG_PRINTF("terminating...\n");
return rv;
}
rv = roseCatchUpMPV(t, loc, scratch);
assert(rv != HWLM_CONTINUE_MATCHING
|| scratch->catchup_pq.qm_size <= t->outfixEndQueue);
+ assert(!can_stop_matching(scratch) || rv == HWLM_TERMINATE_MATCHING);
return rv;
}
struct hs_scratch *scratch) {
u64a cur_offset = loc + scratch->core_info.buf_offset;
assert(cur_offset >= scratch->tctxt.minMatchOffset);
+ assert(!can_stop_matching(scratch));
if (canSkipCatchUpMPV(t, scratch, cur_offset)) {
updateMinMatchOffsetFromMpv(&scratch->tctxt, cur_offset);
|| scratch->tctxt.minMatchOffset == end);
assert(rv != HWLM_CONTINUE_MATCHING
|| scratch->tctxt.minNonMpvMatchOffset == end);
+ assert(!can_stop_matching(scratch) || rv == HWLM_TERMINATE_MATCHING);
return rv;
}
* be known to be consistent */
if (ensureMpvQueueFlushed(t, scratch, qi, loc, in_catchup)
== HWLM_TERMINATE_MATCHING) {
+ DEBUG_PRINTF("terminating...\n");
return HWLM_TERMINATE_MATCHING;
}
}