In resume_qmin check if the fetch context is already shutting down - if so, try to destroy it, don't continue
(cherry picked from commit 7c960e89ea)
This commit is contained in:
@@ -4104,7 +4104,6 @@ resume_qmin(isc_task_t *task, isc_event_t *event) {
|
||||
fetchctx_t *fctx;
|
||||
isc_result_t result;
|
||||
bool bucket_empty;
|
||||
bool locked = false;
|
||||
unsigned int bucketnum;
|
||||
unsigned int findoptions = 0;
|
||||
dns_name_t *fname, *dcname;
|
||||
@@ -4137,6 +4136,11 @@ resume_qmin(isc_task_t *task, isc_event_t *event) {
|
||||
|
||||
dns_resolver_destroyfetch(&fctx->qminfetch);
|
||||
|
||||
if (SHUTTINGDOWN(fctx)) {
|
||||
maybe_destroy(fctx, false);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/*
|
||||
* Note: fevent->rdataset must be disassociated and
|
||||
* isc_event_free(&event) be called before resuming
|
||||
@@ -4219,8 +4223,7 @@ resume_qmin(isc_task_t *task, isc_event_t *event) {
|
||||
cleanup:
|
||||
INSIST(event == NULL);
|
||||
INSIST(fevent == NULL);
|
||||
if (!locked)
|
||||
LOCK(&res->buckets[bucketnum].lock);
|
||||
LOCK(&res->buckets[bucketnum].lock);
|
||||
bucket_empty = fctx_decreference(fctx);
|
||||
UNLOCK(&res->buckets[bucketnum].lock);
|
||||
if (bucket_empty)
|
||||
|
||||
Reference in New Issue
Block a user