]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Remove active handles tracking from isc__nmsocket_t
authorOndřej Surý <ondrej@isc.org>
Wed, 23 Feb 2022 07:54:49 +0000 (08:54 +0100)
committerOndřej Surý <ondrej@isc.org>
Wed, 23 Feb 2022 21:54:47 +0000 (22:54 +0100)
The isc__nmsocket_t has locked array of isc_nmhandle_t that's not used
for anything.  The isc__nmhandle_get() adds the isc_nmhandle_t to the
locked array (and resized if necessary) and removed when
isc_nmhandle_put() finally destroys the handle.  That's all it does, so
it serves no useful purpose.

Remove the .ah_handles, .ah_size, and .ah_frees members of the
isc__nmsocket_t and .ah_pos member of the isc_nmhandle_t struct.

lib/isc/netmgr/netmgr-int.h
lib/isc/netmgr/netmgr.c

index 00630688c5641bbaa4cf111860511a598b8e6a82..a81558bbea4cfbb60f3cc0cb34a642e0f04b830a 100644 (file)
@@ -250,7 +250,6 @@ struct isc_nmhandle {
         * the socket.
         */
        isc_nmsocket_t *sock;
-       size_t ah_pos; /* Position in the socket's 'active handles' array */
 
        isc_nm_http_session_t *httpsession;
 
@@ -1087,30 +1086,9 @@ struct isc_nmsocket {
        isc_result_t result;
 
        /*%
-        * List of active handles.
-        * ah - current position in 'ah_frees'; this represents the
-        *      current number of active handles;
-        * ah_size - size of the 'ah_frees' and 'ah_handles' arrays
-        * ah_handles - array pointers to active handles
-        *
-        * Adding a handle
-        *  - if ah == ah_size, reallocate
-        *  - x = ah_frees[ah]
-        *  - ah_frees[ah++] = 0;
-        *  - ah_handles[x] = handle
-        *  - x must be stored with the handle!
-        * Removing a handle:
-        *  - ah_frees[--ah] = x
-        *  - ah_handles[x] = NULL;
-        *
-        * XXX: for now this is locked with socket->lock, but we
-        * might want to change it to something lockless in the
-        * future.
+        * Current number of active handles.
         */
        atomic_int_fast32_t ah;
-       size_t ah_size;
-       size_t *ah_frees;
-       isc_nmhandle_t **ah_handles;
 
        /*% Buffer for TCPDNS processing */
        size_t buf_size;
index e2bc7519f208c48d9d7064b8702686fa9ee9e914..0e8a4918316975403aece663399605e07ebb4efa 100644 (file)
@@ -1279,10 +1279,6 @@ nmsocket_cleanup(isc_nmsocket_t *sock, bool dofree FLARG) {
        isc_astack_destroy(sock->inactivereqs);
        sock->magic = 0;
 
-       isc_mem_put(sock->mgr->mctx, sock->ah_frees,
-                   sock->ah_size * sizeof(sock->ah_frees[0]));
-       isc_mem_put(sock->mgr->mctx, sock->ah_handles,
-                   sock->ah_size * sizeof(sock->ah_handles[0]));
        isc_condition_destroy(&sock->scond);
        isc_condition_destroy(&sock->cond);
        isc_mutex_destroy(&sock->lock);
@@ -1473,7 +1469,6 @@ isc___nmsocket_init(isc_nmsocket_t *sock, isc_nm_t *mgr, isc_nmsocket_type type,
 
        *sock = (isc_nmsocket_t){ .type = type,
                                  .fd = -1,
-                                 .ah_size = 32,
                                  .inactivehandles = isc_astack_new(
                                          mgr->mctx, ISC_NM_HANDLES_STACK_SIZE),
                                  .inactivereqs = isc_astack_new(
@@ -1498,15 +1493,7 @@ isc___nmsocket_init(isc_nmsocket_t *sock, isc_nm_t *mgr, isc_nmsocket_type type,
        isc_nm_attach(mgr, &sock->mgr);
        sock->uv_handle.handle.data = sock;
 
-       sock->ah_frees = isc_mem_get(mgr->mctx,
-                                    sock->ah_size * sizeof(sock->ah_frees[0]));
-       sock->ah_handles = isc_mem_get(
-               mgr->mctx, sock->ah_size * sizeof(sock->ah_handles[0]));
        ISC_LINK_INIT(&sock->quotacb, link);
-       for (size_t i = 0; i < 32; i++) {
-               sock->ah_frees[i] = i;
-               sock->ah_handles[i] = NULL;
-       }
 
        switch (type) {
        case isc_nm_udpsocket:
@@ -1634,8 +1621,6 @@ isc_nmhandle_t *
 isc___nmhandle_get(isc_nmsocket_t *sock, isc_sockaddr_t *peer,
                   isc_sockaddr_t *local FLARG) {
        isc_nmhandle_t *handle = NULL;
-       size_t handlenum;
-       int pos;
 
        REQUIRE(VALID_NMSOCK(sock));
 
@@ -1670,36 +1655,13 @@ isc___nmhandle_get(isc_nmsocket_t *sock, isc_sockaddr_t *peer,
                handle->local = sock->iface;
        }
 
-       LOCK(&sock->lock);
-       /* We need to add this handle to the list of active handles */
-       if ((size_t)atomic_load(&sock->ah) == sock->ah_size) {
-               sock->ah_frees = isc_mem_reget(
-                       sock->mgr->mctx, sock->ah_frees,
-                       sock->ah_size * sizeof(sock->ah_frees[0]),
-                       sock->ah_size * 2 * sizeof(sock->ah_frees[0]));
-               sock->ah_handles = isc_mem_reget(
-                       sock->mgr->mctx, sock->ah_handles,
-                       sock->ah_size * sizeof(sock->ah_handles[0]),
-                       sock->ah_size * 2 * sizeof(sock->ah_handles[0]));
-
-               for (size_t i = sock->ah_size; i < sock->ah_size * 2; i++) {
-                       sock->ah_frees[i] = i;
-                       sock->ah_handles[i] = NULL;
-               }
-
-               sock->ah_size *= 2;
-       }
-
-       handlenum = atomic_fetch_add(&sock->ah, 1);
-       pos = sock->ah_frees[handlenum];
+       (void)atomic_fetch_add(&sock->ah, 1);
 
-       INSIST(sock->ah_handles[pos] == NULL);
-       sock->ah_handles[pos] = handle;
-       handle->ah_pos = pos;
 #ifdef NETMGR_TRACE
+       LOCK(&sock->lock);
        ISC_LIST_APPEND(sock->active_handles, handle, active_link);
-#endif
        UNLOCK(&sock->lock);
+#endif
 
        switch (sock->type) {
        case isc_nm_udpsocket:
@@ -1776,7 +1738,6 @@ nmhandle_free(isc_nmsocket_t *sock, isc_nmhandle_t *handle) {
 
 static void
 nmhandle_deactivate(isc_nmsocket_t *sock, isc_nmhandle_t *handle) {
-       size_t handlenum;
        bool reuse = false;
 
        /*
@@ -1786,18 +1747,12 @@ nmhandle_deactivate(isc_nmsocket_t *sock, isc_nmhandle_t *handle) {
         */
        LOCK(&sock->lock);
 
-       INSIST(sock->ah_handles[handle->ah_pos] == handle);
-       INSIST(sock->ah_size > handle->ah_pos);
-       INSIST(atomic_load(&sock->ah) > 0);
-
 #ifdef NETMGR_TRACE
        ISC_LIST_UNLINK(sock->active_handles, handle, active_link);
 #endif
 
-       sock->ah_handles[handle->ah_pos] = NULL;
-       handlenum = atomic_fetch_sub(&sock->ah, 1) - 1;
-       sock->ah_frees[handlenum] = handle->ah_pos;
-       handle->ah_pos = 0;
+       INSIST(atomic_fetch_sub(&sock->ah, 1) > 0);
+
        if (atomic_load(&sock->active)) {
                reuse = isc_astack_trypush(sock->inactivehandles, handle);
        }