Commit 0b4e2cd4 authored by Evan Hunt's avatar Evan Hunt
Browse files

restore allowance for tcp-clients < interfaces

in the "refactor tcpquota and pipeline refs" commit, the counting
of active interfaces was tightened in such a way that named could
fail to listen on an interface if there were more interfaces than
tcp-clients. when checking the quota to start accepting on an
interface, if the number of active clients was above zero, then
it was presumed that some other client was able to handle accepting
new connections. this, however, ignored the fact that the current client
could be included in that count, so if the quota was already exceeded
before all the interfaces were listening, some interfaces would never
listen.

we now check whether the current client has been marked active; if so,
then the number of active clients on the interface must be greater
than 1, not 0.
parent 49394512
...@@ -3462,8 +3462,9 @@ client_accept(ns_client_t *client) { ...@@ -3462,8 +3462,9 @@ client_accept(ns_client_t *client) {
* *
* So, we check here to see if any other clients are * So, we check here to see if any other clients are
* already servicing TCP queries on this interface (whether * already servicing TCP queries on this interface (whether
* accepting, reading, or processing). If we find at least * accepting, reading, or processing). If we find that at
* one, then it's okay *not* to call accept - we can let this * least one client other than this one is active, then
* it's okay *not* to call accept - we can let this
* client go inactive and another will take over when it's * client go inactive and another will take over when it's
* done. * done.
* *
...@@ -3477,7 +3478,8 @@ client_accept(ns_client_t *client) { ...@@ -3477,7 +3478,8 @@ client_accept(ns_client_t *client) {
* quota is tcp-clients plus the number of listening * quota is tcp-clients plus the number of listening
* interfaces plus 1.) * interfaces plus 1.)
*/ */
exit = (isc_atomic_xadd(&client->interface->ntcpactive, 0) > 0); exit = (isc_atomic_xadd(&client->interface->ntcpactive, 0) >
(client->tcpactive ? 1 : 0));
if (exit) { if (exit) {
client->newstate = NS_CLIENTSTATE_INACTIVE; client->newstate = NS_CLIENTSTATE_INACTIVE;
(void)exit_check(client); (void)exit_check(client);
......
...@@ -8487,7 +8487,8 @@ avoid-v6-udp-ports { 40000; range 50000 60000; }; ...@@ -8487,7 +8487,8 @@ avoid-v6-udp-ports { 40000; range 50000 60000; };
<para> <para>
The number of file descriptors reserved for TCP, stdio, The number of file descriptors reserved for TCP, stdio,
etc. This needs to be big enough to cover the number of etc. This needs to be big enough to cover the number of
interfaces <command>named</command> listens on, <command>tcp-clients</command> as well as interfaces <command>named</command> listens on plus
<command>tcp-clients</command>, as well as
to provide room for outgoing TCP queries and incoming zone to provide room for outgoing TCP queries and incoming zone
transfers. The default is <literal>512</literal>. transfers. The default is <literal>512</literal>.
The minimum value is <literal>128</literal> and the The minimum value is <literal>128</literal> and the
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment