diff --git a/CHANGES b/CHANGES index 2e0e6f53d0..ff9ecac4f2 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +3913. [bug] Address race issue in dispatch. [RT #36731] + 3912. [bug] Address some unrecoverable lookup failures. [RT #36330] 3911. [func] Implement EDNS EXPIRE option client side, allowing diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index b1d93788d1..5a90ee5e7b 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -1122,8 +1122,8 @@ udp_recv(isc_event_t *ev_in, dns_dispatch_t *disp, dispsocket_t *dispsock) { } else { free_buffer(disp, ev->region.base, ev->region.length); - UNLOCK(&disp->lock); isc_event_free(&ev_in); + UNLOCK(&disp->lock); return; } } else if (ev->result != ISC_R_SUCCESS) { @@ -1134,8 +1134,8 @@ udp_recv(isc_event_t *ev_in, dns_dispatch_t *disp, dispsocket_t *dispsock) { "odd socket result in udp_recv(): %s", isc_result_totext(ev->result)); - UNLOCK(&disp->lock); isc_event_free(&ev_in); + UNLOCK(&disp->lock); return; } @@ -1310,9 +1310,8 @@ udp_recv(isc_event_t *ev_in, dns_dispatch_t *disp, dispsocket_t *dispsock) { */ deactivate_dispsocket(disp, dispsock); } - UNLOCK(&disp->lock); - isc_event_free(&ev_in); + UNLOCK(&disp->lock); } /* @@ -1494,9 +1493,8 @@ tcp_recv(isc_task_t *task, isc_event_t *ev_in) { restart: (void)startrecv(disp, NULL); - UNLOCK(&disp->lock); - isc_event_free(&ev_in); + UNLOCK(&disp->lock); } /*