]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Do peer conn accounting in comm layer
authorAmos Jeffries <squid3@treenet.co.nz>
Tue, 20 Jul 2010 07:28:33 +0000 (19:28 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Tue, 20 Jul 2010 07:28:33 +0000 (19:28 +1200)
src/comm/Connection.cc
src/forward.cc

index 0bcf2290849654691a192af0643e7e3bc0d9959b..ffc3371e2e894f2c8831976951cbe9d9bd65d65d 100644 (file)
@@ -45,6 +45,8 @@ Comm::Connection::close()
     if (isOpen()) {
         comm_close(fd);
         fd = -1;
+        if (_peer)
+            _peer->stats.conn_open--;
     }
 }
 
@@ -61,8 +63,8 @@ Comm::Connection::setPeer(peer *p)
         _peer = NULL;
     }
 
-   /* set the new one (unless it is NULL */
-   if (p) {
+    /* set the new one (unless it is NULL */
+    if (p) {
         _peer = cbdataReference(p);
-   }
+    }
 }
index 837d654449ffcf7dee684f0bff7fc7bde09a95f4..e8b6daa31e2dd544dc99f5298823a190b2c37139 100644 (file)
@@ -487,12 +487,6 @@ void
 FwdState::serverClosed(int fd)
 {
     debugs(17, 2, HERE << "FD " << fd << " " << entry->url());
-    assert(serverConnection()->fd == fd);
-
-    if (serverConnection()->getPeer()) {
-        serverConnection()->getPeer()->stats.conn_open--;
-    }
-
     retryOrBail();
 }
 
@@ -577,7 +571,6 @@ FwdState::negotiateSSL(int fd)
 
             if (serverConnection()->getPeer()) {
                 peerConnectFailed(serverConnection()->getPeer());
-                serverConnection()->getPeer()->stats.conn_open--;
             }
 
             serverConnection()->close();
@@ -724,7 +717,9 @@ FwdState::connectTimeout(int fd)
                 peerConnectFailed(serverConnection()->getPeer());
     }
 
-    serverConnection()->close();
+    if (isServerConnectionOpen()) {
+        serverConnection()->close();
+    }
 }
 
 /**
@@ -953,11 +948,13 @@ FwdState::dispatch()
              */
             request->flags.proxy_keepalive = 0;
             /*
-             * Set the dont_retry flag becuase this is not a
+             * Set the dont_retry flag because this is not a
              * transient (network) error; its a bug.
              */
             flags.dont_retry = 1;
-            serverConnection()->close();
+            if (isServerConnectionOpen()) {
+                serverConnection()->close();
+            }
             break;
         }
     }