From: Mark Andrews Date: Wed, 6 Aug 2014 08:49:53 +0000 (+1000) Subject: 3913. [bug] Address race issue in dispatch. [RT #36731] X-Git-Tag: v9.8.8b2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca1112642095b2f2a90d5c8f3a7483f3625f19cd;p=thirdparty%2Fbind9.git 3913. [bug] Address race issue in dispatch. [RT #36731] (cherry picked from commit 493f3eb297ea90ad2eb349591f1cb88194dce46d) --- diff --git a/CHANGES b/CHANGES index 6a51fb890fe..b2a301cd882 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,7 @@ --- 9.8.8b2 released --- +3913. [bug] Address race issue in dispatch. [RT #36731] + 3910. [bug] Fix races to free event during shutdown. [RT#36720] 3909. [bug] When computing the number of elements required for a diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index 992623d27f1..7dd63ce8649 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -1245,8 +1245,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) { @@ -1257,8 +1257,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; } @@ -1432,9 +1432,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); } /* @@ -1616,9 +1615,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); } /*