mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
detach fetchhandle before resume query processing
otherwise, another hook async event or DNS recursion would trigger an assertion failure.
This commit is contained in:
parent
5a05cbebc4
commit
d520f01c7b
2 changed files with 15 additions and 2 deletions
|
|
@ -6349,6 +6349,15 @@ query_hookresume(isc_task_t *task, isc_event_t *event) {
|
|||
ISC_LIST_UNLINK(client->manager->recursing, client, rlink);
|
||||
}
|
||||
UNLOCK(&client->manager->reclock);
|
||||
|
||||
/*
|
||||
* This event is running under a client task, so it's safe to detach
|
||||
* the fetch handle. And it should be done before resuming query
|
||||
* processing below, since that may trigger another recursion or
|
||||
* asynchronous hook event.
|
||||
*/
|
||||
isc_nmhandle_detach(&client->fetchhandle);
|
||||
|
||||
client->state = NS_CLIENTSTATE_WORKING;
|
||||
|
||||
if (canceled) {
|
||||
|
|
@ -6450,7 +6459,6 @@ query_hookresume(isc_task_t *task, isc_event_t *event) {
|
|||
qctx_destroy(qctx);
|
||||
isc_mem_put(client->mctx, qctx, sizeof(*qctx));
|
||||
isc_event_free(&event);
|
||||
isc_nmhandle_detach(&client->fetchhandle);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
|
|
|
|||
|
|
@ -717,7 +717,12 @@ hook_recurse_common(void *arg, void *data, isc_result_t *resultp,
|
|||
asdata->async = true;
|
||||
}
|
||||
} else {
|
||||
/* Resume from the completion of recursion */
|
||||
/*
|
||||
* Resume from the completion of async event.
|
||||
* fetchhandle should have been detached so that we can start
|
||||
* another async event or DNS recursive resolution.
|
||||
*/
|
||||
INSIST(qctx->client->fetchhandle == NULL);
|
||||
asdata->async = false;
|
||||
switch (hookpoint) {
|
||||
case NS_QUERY_GOT_ANSWER_BEGIN:
|
||||
|
|
|
|||
Loading…
Reference in a new issue