From: Ondřej Surý Date: Thu, 12 Dec 2019 12:08:34 +0000 (+0100) Subject: Additionally lock accessing the ISC_LISTs in free_socket() X-Git-Tag: v9.15.7~2^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5b6db3b09683add9590afc9b366f0f51484412f;p=thirdparty%2Fbind9.git Additionally lock accessing the ISC_LISTs in free_socket() --- diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index 9cff8de2189..b0699f099c4 100644 --- a/lib/isc/unix/socket.c +++ b/lib/isc/unix/socket.c @@ -1832,10 +1832,10 @@ destroy(isc__socket_t **sockp) { isc__socketmgr_t *manager = sock->manager; isc__socketthread_t *thread = NULL; - isc_refcount_destroy(&sock->references); - socket_log(sock, NULL, CREATION, "destroying"); + isc_refcount_destroy(&sock->references); + LOCK(&sock->lock); INSIST(ISC_LIST_EMPTY(sock->connect_list)); INSIST(ISC_LIST_EMPTY(sock->accept_list)); @@ -1934,12 +1934,14 @@ free_socket(isc__socket_t **socketp) { INSIST(VALID_SOCKET(sock)); INSIST(isc_refcount_current(&sock->references) == 0); + LOCK(&sock->lock); INSIST(!sock->connecting); INSIST(ISC_LIST_EMPTY(sock->recv_list)); INSIST(ISC_LIST_EMPTY(sock->send_list)); INSIST(ISC_LIST_EMPTY(sock->accept_list)); INSIST(ISC_LIST_EMPTY(sock->connect_list)); INSIST(!ISC_LINK_LINKED(sock, link)); + UNLOCK(&sock->lock); sock->common.magic = 0; sock->common.impmagic = 0;