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