int state = kr_resolve_consume(&task->req, packet);
while (state == KNOT_STATE_PRODUCE) {
state = kr_resolve_produce(&task->req, &addr, &sock_type, next_query);
+ if (++task->iter_count > KR_ITER_LIMIT) {
+ return qr_task_finalize(task, KNOT_STATE_FAIL);
+ }
}
/* We're done, no more iterations needed */
if (state & (KNOT_STATE_DONE|KNOT_STATE_FAIL)) {
return qr_task_finalize(task, state);
- } else if (++task->iter_count > KR_ITER_LIMIT) {
- return qr_task_finalize(task, KNOT_STATE_FAIL);
}
/* Create connection for iterative query */
}
/* Follow canonical name as next SNAME. */
- if (cname != query->sname) {
+ if (!knot_dname_is_equal(cname, query->sname)) {
DEBUG_MSG("<= cname chain, following\n");
struct kr_query *next = kr_rplan_push(&req->rplan, query->parent, cname, query->sclass, query->stype);
kr_zonecut_set_sbelt(&next->zone_cut);