Handle ISC_R_SUCCESS on a deactivated response in udp_recv()

There is a possibility for `udp_recv()` to be called with `eresult`
being `ISC_R_SUCCESS`, but nevertheless with already deactivated `resp`,
which can happen when the request has been canceled in the meantime.

(cherry picked from commit e3a88862c0)
This commit is contained in:
Aram Sargsyan 2022-04-27 12:29:50 +00:00 committed by Arаm Sаrgsyаn
parent f46e46e730
commit 4de1f65e4d

View file

@ -491,6 +491,8 @@ udp_recv(isc_nmhandle_t *handle, isc_result_t eresult, isc_region_t *region,
*/
if (ISC_LINK_LINKED(resp, alink)) {
response = resp->response;
} else if (eresult == ISC_R_SUCCESS) {
eresult = ISC_R_CANCELED;
}
if (eresult != ISC_R_SUCCESS) {
@ -503,8 +505,6 @@ udp_recv(isc_nmhandle_t *handle, isc_result_t eresult, isc_region_t *region,
goto done;
}
INSIST(ISC_LINK_LINKED(resp, alink));
peer = isc_nmhandle_peeraddr(handle);
isc_netaddr_fromsockaddr(&netaddr, &peer);