]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Additionally lock accessing the ISC_LISTs in free_socket()
authorOndřej Surý <ondrej@isc.org>
Thu, 12 Dec 2019 12:08:34 +0000 (13:08 +0100)
committerOndřej Surý <ondrej@isc.org>
Thu, 12 Dec 2019 12:08:34 +0000 (13:08 +0100)
lib/isc/unix/socket.c

index 9cff8de2189f62fa558cd20d03aa180dd8e0ad93..b0699f099c47f3e788ff11415126cd06ed53860c 100644 (file)
@@ -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;