rctx_respinit(query, fctx, eresult, region, &rctx);
- if (atomic_load_acquire(&fctx->res->exiting)) {
+ if (eresult == ISC_R_SHUTTINGDOWN ||
+ atomic_load_acquire(&fctx->res->exiting))
+ {
result = ISC_R_SHUTTINGDOWN;
FCTXTRACE("resolver shutting down");
rctx.finish = NULL;
.fctx = fctx,
.broken_type = badns_response,
.retryopts = query->options };
- isc_buffer_init(&rctx->buffer, region->base, region->length);
- isc_buffer_add(&rctx->buffer, region->length);
+ if (result == ISC_R_SUCCESS) {
+ REQUIRE(region != NULL);
+ isc_buffer_init(&rctx->buffer, region->base, region->length);
+ isc_buffer_add(&rctx->buffer, region->length);
+ } else {
+ isc_buffer_initnull(&rctx->buffer);
+ }
TIME_NOW(&rctx->tnow);
rctx->finish = &rctx->tnow;
rctx->now = (isc_stdtime_t)isc_time_seconds(&rctx->tnow);