2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-28 13:08:06 +00:00

[master] avoid active-counter underflow

3472.	[bug]		The active-connections counter in the socket
			statistics could underflow. [RT #31747]
(cherry picked from commit 4dfe072abe4e76f5078a38ea0b97800333290877)
This commit is contained in:
Evan Hunt 2013-01-23 14:28:23 -08:00
parent 2154c01912
commit 641e87a1a0
2 changed files with 19 additions and 7 deletions

View File

@ -1,3 +1,6 @@
3472. [bug] The active-connections counter in the socket
statistics could underflow. [RT #31747]
3471. [bug] The number of UDP dispatches now defaults to
the number of CPUs even if -n has been set to
a higher value. [RT #30964]

View File

@ -326,16 +326,17 @@ struct isc__socket {
intev_t readable_ev;
intev_t writable_ev;
isc_sockaddr_t peer_address; /* remote address */
isc_sockaddr_t peer_address; /* remote address */
unsigned int pending_recv : 1,
pending_send : 1,
pending_accept : 1,
listener : 1, /* listener socket */
listener : 1, /* listener socket */
connected : 1,
connecting : 1, /* connect pending */
bound : 1, /* bound to local addr */
dupped : 1;
connecting : 1, /* connect pending */
bound : 1, /* bound to local addr */
dupped : 1,
active : 1; /* currently active */
#ifdef ISC_NET_RECVOVERFLOW
unsigned char overflow; /* used for MSG_TRUNC fake */
@ -1995,7 +1996,10 @@ closesocket(isc__socketmgr_t *manager, isc__socket_t *sock, int fd) {
select_poke(manager, fd, SELECT_POKE_CLOSE);
inc_stats(manager->stats, sock->statsindex[STATID_CLOSE]);
dec_stats(manager->stats, sock->statsindex[STATID_ACTIVE]);
if (sock->active == 1) {
dec_stats(manager->stats, sock->statsindex[STATID_ACTIVE]);
sock->active = 0;
}
/*
* update manager->maxfd here (XXX: this should be implemented more
@ -2582,7 +2586,11 @@ opensocket(isc__socketmgr_t *manager, isc__socket_t *sock,
setup_done:
inc_stats(manager->stats, sock->statsindex[STATID_OPEN]);
inc_stats(manager->stats, sock->statsindex[STATID_ACTIVE]);
if (sock->active == 0) {
inc_stats(manager->stats, sock->statsindex[STATID_ACTIVE]);
sock->active = 1;
}
return (ISC_R_SUCCESS);
}
@ -2625,6 +2633,7 @@ socket_create(isc_socketmgr_t *manager0, int pf, isc_sockettype_t type,
INSIST(0);
}
sock->active = 0;
sock->pf = pf;
result = opensocket(manager, sock, (isc__socket_t *)dup_socket);