diff --git a/CHANGES b/CHANGES index c9ef106552..751bf3ff59 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +5927. [bug] A race was possible in dns_dispatch_connect() + that could trigger an assertion failure if two + threads called it near-simultaneously. [GL #3456] + 5926. [func] Handle transient TCP connect() EADDRINUSE failures on FreeBSD (and possibly other BSDs) by trying three times before giving up. [GL #3451] diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index e0ae80cbb0..fcee9751c2 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -1812,7 +1812,6 @@ dns_dispatch_connect(dns_dispentry_t *resp) { case DNS_DISPATCHSTATE_NONE: /* First connection, continue with connecting */ LOCK(&disp->lock); - INSIST(ISC_LIST_EMPTY(disp->pending)); ISC_LIST_APPEND(disp->pending, resp, plink); UNLOCK(&disp->lock); dns_dispatch_attach(disp, &(dns_dispatch_t *){ NULL });