a2a915
diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c
a2a915
index f657c30..ff9a2d2 100644
a2a915
--- a/bin/dig/dighost.c
a2a915
+++ b/bin/dig/dighost.c
a2a915
@@ -1694,6 +1694,13 @@ clear_query(dig_query_t *query) {
a2a915
 
a2a915
 	if (query->timer != NULL)
a2a915
 		isc_timer_detach(&query->timer);
a2a915
+
a2a915
+	if (query->waiting_senddone) {
a2a915
+		debug("send_done not yet called");
a2a915
+		query->pending_free = ISC_TRUE;
a2a915
+		return;
a2a915
+	}
a2a915
+
a2a915
 	lookup = query->lookup;
a2a915
 
a2a915
 	if (lookup->current_query == query)
a2a915
@@ -1719,10 +1726,7 @@ clear_query(dig_query_t *query) {
a2a915
 	isc_mempool_put(commctx, query->recvspace);
a2a915
 	isc_buffer_invalidate(&query->recvbuf);
a2a915
 	isc_buffer_invalidate(&query->lengthbuf);
a2a915
-	if (query->waiting_senddone)
a2a915
-		query->pending_free = ISC_TRUE;
a2a915
-	else
a2a915
-		isc_mem_free(mctx, query);
a2a915
+	isc_mem_free(mctx, query);
a2a915
 }
a2a915
 
a2a915
 /*%
a2a915
@@ -2811,9 +2815,9 @@ send_done(isc_task_t *_task, isc_event_t *event) {
a2a915
 	isc_event_free(&event);
a2a915
 
a2a915
 	if (query->pending_free)
a2a915
-		isc_mem_free(mctx, query);
a2a915
+		clear_query(query);
a2a915
 
a2a915
-	check_if_done();
a2a915
+	check_next_lookup(l);
a2a915
 	UNLOCK_LOOKUP;
a2a915
 }
a2a915