mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 06:25:31 +00:00
Remove active handles tracking from isc__nmsocket_t
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.
This commit is contained in:
@@ -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]));
|
||||
(void)atomic_fetch_add(&sock->ah, 1);
|
||||
|
||||
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];
|
||||
|
||||
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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user