<pre style='margin:0'>
Daniel J. Luke (danielluke) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/1593ddcf5aef196ade2b6a8ae0bb95909bb02562">https://github.com/macports/macports-ports/commit/1593ddcf5aef196ade2b6a8ae0bb95909bb02562</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 1593ddc  bind9: update to 9.16.1
</span>1593ddc is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 1593ddcf5aef196ade2b6a8ae0bb95909bb02562
</span>Author: Daniel J. Luke <dluke@macports.org>
AuthorDate: Wed Mar 18 23:00:30 2020 -0400

<span style='display:block; white-space:pre;color:#404040;'>    bind9: update to 9.16.1
</span>---
 net/bind9/Portfile                               |  12 +-
 net/bind9/files/bind-v9.16.0-tcp_quota_fix.patch | 341 -----------------------
 2 files changed, 5 insertions(+), 348 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/bind9/Portfile b/net/bind9/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 9d2c01b..11e060b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/bind9/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/bind9/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2,8 +2,7 @@ PortSystem 1.0
</span> PortGroup  legacysupport 1.0
 
 name                   bind9
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version                 9.16.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision           2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version                    9.16.1
</span> categories                net
 maintainers            {geeklair.net:dluke @danielluke}
 platforms              darwin freebsd sunos
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -25,9 +24,9 @@ homepage               https://www.isc.org/
</span> distname          bind-${version}
 master_sites           isc:${name}/${version}
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums       rmd160  b7da2378129844f3a012def4f10a9bfa8a0c04f9 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           sha256  af4bd9bdaeb1aa7399429972f3a8aa01dd6886b7ae046d703ab8da45330f2e28 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           size    4533976
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums  rmd160  b2699fa1944e183c6cd64372ae6d78f7fda87a02 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           sha256  a913d7e78135b9123d233215b58102fa0f18130fb1e158465a1c2b6f3bd75e91 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           size    4541768
</span> 
 use_xz                 yes
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -44,8 +43,7 @@ universal_variant      no
</span> 
 compiler.blacklist     gcc-4.2
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles              atomics.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   bind-v9.16.0-tcp_quota_fix.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles         atomics.patch
</span> 
 test.run               yes
 test.target            test
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/bind9/files/bind-v9.16.0-tcp_quota_fix.patch b/net/bind9/files/bind-v9.16.0-tcp_quota_fix.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index e64c077..0000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/bind9/files/bind-v9.16.0-tcp_quota_fix.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,341 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git lib/isc/netmgr/netmgr-int.h lib/isc/netmgr/netmgr-int.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index ae83f943d3..c85065f39d 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- lib/isc/netmgr/netmgr-int.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ lib/isc/netmgr/netmgr-int.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -356,7 +356,16 @@ struct isc_nmsocket {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   isc_quota_t *quota;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   isc_quota_t *pquota;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  bool         overquota;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /*%
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   * How many connections we have not accepted due to quota?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   * When we close a connection we need to accept a new one.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int overquota;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  /*%
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   * How many active connections we have?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  int conns;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*%
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * Socket statistics
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git lib/isc/netmgr/netmgr.c lib/isc/netmgr/netmgr.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index f4361575cc..26728c1ba6 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- lib/isc/netmgr/netmgr.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ lib/isc/netmgr/netmgr.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -727,6 +727,11 @@ nmsocket_cleanup(isc_nmsocket_t *sock, bool dofree)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for (int i = 0; i < sock->nchildren; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if (!atomic_load(&sock->children[i].destroying)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           nmsocket_cleanup(&sock->children[i], false);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                          if (sock->statsindex != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                  isc__nm_decstats(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                          sock->mgr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                          sock->statsindex[STATID_ACTIVE]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                          }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -738,6 +743,9 @@ nmsocket_cleanup(isc_nmsocket_t *sock, bool dofree)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           sock->children = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           sock->nchildren = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (sock->statsindex != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          isc__nm_decstats(sock->mgr, sock->statsindex[STATID_ACTIVE]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (sock->tcphandle != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           isc_nmhandle_unref(sock->tcphandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -854,8 +862,6 @@ isc__nmsocket_prep_destroy(isc_nmsocket_t *sock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (sock->children != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           for (int i = 0; i < sock->nchildren; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   atomic_store(&sock->children[i].active, false);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                  isc__nm_decstats(sock->mgr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                                   sock->statsindex[STATID_ACTIVE]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git lib/isc/netmgr/tcp.c lib/isc/netmgr/tcp.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index a83fede0d2..58ffd3c404 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- lib/isc/netmgr/tcp.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ lib/isc/netmgr/tcp.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -26,12 +26,28 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <isc/region.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <isc/result.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <isc/sockaddr.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <isc/stdtime.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <isc/thread.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <isc/util.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "netmgr-int.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "uv-compat.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static atomic_uint_fast32_t last_tcpquota_log = ATOMIC_VAR_INIT(0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static bool
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+can_log_tcp_quota() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  isc_stdtime_t now, last;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  isc_stdtime_get(&now);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  last = atomic_exchange_relaxed(&last_tcpquota_log, now);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (now != last) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          return (true);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return (false);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static int
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tcp_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -668,9 +684,6 @@ read_cb(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   isc__nm_free_uvbuf(sock, buf);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  if (sock->quota) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          isc_quota_detach(&sock->quota);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    * This might happen if the inner socket is closing.  It means that
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -699,6 +712,7 @@ accept_connection(isc_nmsocket_t *ssock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   struct sockaddr_storage ss;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   isc_sockaddr_t          local;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   int                     r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  bool overquota = false;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   REQUIRE(VALID_NMSOCK(ssock));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   REQUIRE(ssock->tid == isc_nm_tid());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -711,10 +725,25 @@ accept_connection(isc_nmsocket_t *ssock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (ssock->pquota != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           result = isc_quota_attach(ssock->pquota, &quota);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * We share the quota between all TCP sockets. Others
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * may have used up all the quota slots, in which case
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * this socket could starve. So we only fail here if we
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * already had at least one active connection on this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * socket. This guarantees that we'll maintain some level
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * of service while over quota, and will resume normal
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * service when the quota comes back down.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if (result != ISC_R_SUCCESS) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                  isc__nm_incstats(ssock->mgr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                                   ssock->statsindex[STATID_ACCEPTFAIL]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                  return (result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  ssock->overquota++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  overquota = true;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  if (ssock->conns > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                          isc__nm_incstats(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                  ssock->mgr,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                  ssock->statsindex[STATID_ACCEPTFAIL]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                          return (result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -761,6 +790,7 @@ accept_connection(isc_nmsocket_t *ssock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   isc_nmsocket_attach(ssock, &csock->server);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  ssock->conns++;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   handle = isc__nmhandle_get(csock, NULL, &local);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -779,6 +809,9 @@ error:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (csock->quota != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           isc_quota_detach(&csock->quota);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (overquota) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          ssock->overquota--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /* We need to detach it properly to make sure uv_close is called. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   isc_nmsocket_detach(&csock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return (result);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -793,14 +826,14 @@ tcp_connection_cb(uv_stream_t *server, int status)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   UNUSED(status);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   result = accept_connection(ssock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  if (result != ISC_R_SUCCESS) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          if (result == ISC_R_QUOTA || result == ISC_R_SOFTQUOTA) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                  ssock->overquota = true;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (result != ISC_R_SUCCESS && result != ISC_R_NOCONN) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          if ((result != ISC_R_QUOTA && result != ISC_R_SOFTQUOTA) ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+              can_log_tcp_quota()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                "TCP connection failed: %s",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                isc_result_totext(result));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                        ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                        "TCP connection failed: %s",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                        isc_result_totext(result));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -936,17 +969,27 @@ tcp_close_direct(isc_nmsocket_t *sock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   REQUIRE(VALID_NMSOCK(sock));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   REQUIRE(sock->tid == isc_nm_tid());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   REQUIRE(sock->type == isc_nm_tcpsocket);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  isc_nmsocket_t *ssock = sock->server;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (sock->quota != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          isc_nmsocket_t *ssock = sock->server;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           isc_quota_detach(&sock->quota);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          if (ssock->overquota) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  if (ssock != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          ssock->conns--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          while (ssock->conns == 0 && ssock->overquota > 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  ssock->overquota--;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   isc_result_t result = accept_connection(ssock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                  if (result != ISC_R_QUOTA &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                      result != ISC_R_SOFTQUOTA) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                          ssock->overquota = false;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  if (result == ISC_R_SUCCESS || result == ISC_R_NOCONN) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                          continue;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  if ((result != ISC_R_QUOTA &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                       result != ISC_R_SOFTQUOTA) ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                      can_log_tcp_quota()) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                          isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                        ISC_LOGMODULE_NETMGR,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                        ISC_LOG_ERROR,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                        "TCP connection failed: %s",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                        isc_result_totext(result));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git lib/isc/netmgr/tcpdns.c lib/isc/netmgr/tcpdns.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index e384b73be9..f89eb359af 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- lib/isc/netmgr/tcpdns.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ lib/isc/netmgr/tcpdns.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -43,6 +43,9 @@ dnslisten_readcb(isc_nmhandle_t *handle, isc_region_t *region, void *arg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- resume_processing(void *arg);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+tcpdns_close_direct(isc_nmsocket_t *sock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static inline size_t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dnslen(unsigned char *base)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -82,7 +85,6 @@ timer_close_cb(uv_handle_t *handle)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   isc_nmsocket_t *sock = (isc_nmsocket_t *)uv_handle_get_data(handle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   INSIST(VALID_NMSOCK(sock));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  atomic_store(&sock->closed, true);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   isc_nmsocket_detach(&sock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -94,9 +96,7 @@ dnstcp_readtimeout(uv_timer_t *timer)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   REQUIRE(VALID_NMSOCK(sock));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   REQUIRE(sock->tid == isc_nm_tid());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  isc_nmsocket_detach(&sock->outer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  uv_close((uv_handle_t *)&sock->timer, timer_close_cb);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  tcpdns_close_direct(sock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -252,7 +252,9 @@ dnslisten_readcb(isc_nmhandle_t *handle, isc_region_t *region, void *arg)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            * We have a packet: stop timeout timers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           atomic_store(&dnssock->outer->processing, true);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          uv_timer_stop(&dnssock->timer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          if (dnssock->timer_initialized) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  uv_timer_stop(&dnssock->timer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if (atomic_load(&dnssock->sequential)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -399,8 +401,10 @@ resume_processing(void *arg)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (atomic_load(&sock->ah) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           /* Nothing is active; sockets can timeout now */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           atomic_store(&sock->outer->processing, false);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          uv_timer_start(&sock->timer, dnstcp_readtimeout,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                         sock->read_timeout, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          if (sock->timer_initialized) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  uv_timer_start(&sock->timer, dnstcp_readtimeout,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                                 sock->read_timeout, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -413,7 +417,9 @@ resume_processing(void *arg)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           result = processbuffer(sock, &handle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if (result == ISC_R_SUCCESS) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   atomic_store(&sock->outer->processing, true);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                  uv_timer_stop(&sock->timer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  if (sock->timer_initialized) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                          uv_timer_stop(&sock->timer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   isc_nmhandle_unref(handle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           } else if (sock->outer != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   isc_nm_resumeread(sock->outer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -441,7 +447,9 @@ resume_processing(void *arg)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          uv_timer_stop(&sock->timer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          if (sock->timer_initialized) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  uv_timer_stop(&sock->timer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           atomic_store(&sock->outer->processing, true);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           isc_nmhandle_unref(dnshandle);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   } while (atomic_load(&sock->ah) < TCPDNS_CLIENTS_PER_CONN);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -507,18 +515,29 @@ static void
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tcpdns_close_direct(isc_nmsocket_t *sock)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   REQUIRE(sock->tid == isc_nm_tid());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  if (sock->outer != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          sock->outer->rcb.recv = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          isc_nmsocket_detach(&sock->outer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  if (sock->listener != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          isc_nmsocket_detach(&sock->listener);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   /* We don't need atomics here, it's all in single network thread */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (sock->timer_initialized) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * We need to fire the timer callback to clean it up,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * it will then call us again (via detach) so that we
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * can finally close the socket.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           sock->timer_initialized = false;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           uv_timer_stop(&sock->timer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           uv_close((uv_handle_t *)&sock->timer, timer_close_cb);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * At this point we're certain that there are no external
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           * references, we can close everything.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+           */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          if (sock->outer != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  sock->outer->rcb.recv = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  isc_nmsocket_detach(&sock->outer);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          if (sock->listener != NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                  isc_nmsocket_detach(&sock->listener);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          atomic_store(&sock->closed, true);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git lib/isc/netmgr/uverr2result.c lib/isc/netmgr/uverr2result.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index b6a8065e3e..9781454ca6 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- lib/isc/netmgr/uverr2result.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ lib/isc/netmgr/uverr2result.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -38,6 +38,8 @@ isc___nm_uverr2result(int uverr, bool dolog, const char *file,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return (ISC_R_INVALIDFILE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case UV_ENOENT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return (ISC_R_FILENOTFOUND);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  case UV_EAGAIN:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          return (ISC_R_NOCONN);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case UV_EACCES:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case UV_EPERM:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return (ISC_R_NOPERM);
</span></pre><pre style='margin:0'>

</pre>