For UDP queries, after calling dns_adb_beginudpfetch() in fctx_query(),
make sure that dns_adb_endudpfetch() is also called on error path, in
order to adjust the quota back.
(cherry picked from commit
5da79e2be01700c1dd01e5a3f69617129036bb02)
result = resquery_send(query);
if (result != ISC_R_SUCCESS) {
- goto cleanup_dispatch;
+ goto cleanup_udpfetch;
}
}
cleanup_socket:
isc_socket_detach(&query->tcpsocket);
+cleanup_udpfetch:
+ if (!RESQUERY_CANCELED(query)) {
+ if ((query->options & DNS_FETCHOPT_TCP) == 0) {
+ /* Inform the ADB that we're ending a UDP fetch */
+ dns_adb_endudpfetch(fctx->adb, addrinfo);
+ }
+ }
+
cleanup_dispatch:
if (query->dispatch != NULL) {
dns_dispatch_detach(&query->dispatch);