]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Remove ConnStateData::pinning.peer (#2034)
authorEduard Bagdasaryan <eduard.bagdasaryan@measurement-factory.com>
Sat, 22 Mar 2025 23:56:58 +0000 (23:56 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Sun, 23 Mar 2025 14:00:15 +0000 (14:00 +0000)
Use ConnStateData::pinning.serverConnection.getPeer() instead of
copying: pinning.peer does not need to outlive pinning.serverConnection.

src/client_side.cc
src/client_side.h

index ee43129ca0bf0feafc1a79d68eaf45ab2357b0f2..15e4ed3428f5e8991d44dd1607b0b7ea32bf5ed3 100644 (file)
@@ -3717,13 +3717,12 @@ ConnStateData::pinConnection(const Comm::ConnectionPointer &pinServer, const Htt
     pinning.port = request.url.port();
     pinnedHost = pinning.host;
     pinning.pinned = true;
-    if (CachePeer *aPeer = pinServer->getPeer())
-        pinning.peer = cbdataReference(aPeer);
     pinning.auth = request.flags.connectionAuth;
     char stmp[MAX_IPSTRLEN];
     char desc[FD_DESC_SZ];
+    const auto peer = pinning.peer();
     snprintf(desc, FD_DESC_SZ, "%s pinned connection for %s (%d)",
-             (pinning.auth || !pinning.peer) ? pinnedHost : pinning.peer->name,
+             (pinning.auth || !peer) ? pinnedHost : peer->name,
              clientConnection->remote.toUrl(stmp,MAX_IPSTRLEN),
              clientConnection->fd);
     fd_note(pinning.serverConnection->fd, desc);
@@ -3854,7 +3853,7 @@ ConnStateData::borrowPinnedConnection(HttpRequest *request, const AccessLogEntry
     if (pinning.port != request->url.port())
         throw pinningError(ERR_CANNOT_FORWARD); // or generalize ERR_CONFLICT_HOST
 
-    if (pinning.peer && !cbdataReferenceValid(pinning.peer))
+    if (pinning.serverConnection->toGoneCachePeer())
         throw pinningError(ERR_ZERO_SIZE_OBJECT);
 
     if (pinning.peerAccessDenied)
@@ -3881,8 +3880,6 @@ ConnStateData::unpinConnection(const bool andClose)
 {
     debugs(33, 3, pinning.serverConnection);
 
-    cbdataReferenceDone(pinning.peer);
-
     if (Comm::IsConnOpen(pinning.serverConnection)) {
         if (pinning.closeHandler != nullptr) {
             comm_remove_close_handler(pinning.serverConnection->fd, pinning.closeHandler);
index 4a67203f75a56991082ac5c601fd14f435295660..85a67954c36ec9ff30882cd4dd168190750a4708 100644 (file)
@@ -148,7 +148,7 @@ public:
         bool reading = false; ///< we are monitoring for peer connection closure
         bool zeroReply = false; ///< server closed w/o response (ERR_ZERO_SIZE_OBJECT)
         bool peerAccessDenied = false; ///< cache_peer_access denied pinned connection reuse
-        CachePeer *peer = nullptr; ///< CachePeer the connection goes via
+        CachePeer *peer() const { return serverConnection ? serverConnection->getPeer() : nullptr; }
         AsyncCall::Pointer readHandler; ///< detects serverConnection closure
         AsyncCall::Pointer closeHandler; ///< The close handler for pinned server side connection
     } pinning;
@@ -200,7 +200,7 @@ public:
     /// \throws a newly allocated ErrorState if validation fails
     static Comm::ConnectionPointer BorrowPinnedConnection(HttpRequest *, const AccessLogEntryPointer &);
     /// \returns the pinned CachePeer if one exists, nil otherwise
-    CachePeer *pinnedPeer() const {return pinning.peer;}
+    CachePeer *pinnedPeer() const { return pinning.peer(); }
     bool pinnedAuth() const {return pinning.auth;}
 
     /// called just before a FwdState-dispatched job starts using connection