From: Eduard Bagdasaryan Date: Sat, 22 Mar 2025 23:56:58 +0000 (+0000) Subject: Remove ConnStateData::pinning.peer (#2034) X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4d8e3b83ca0149e4e613e34b1096d00c2bcdb59b;p=thirdparty%2Fsquid.git Remove ConnStateData::pinning.peer (#2034) Use ConnStateData::pinning.serverConnection.getPeer() instead of copying: pinning.peer does not need to outlive pinning.serverConnection. --- diff --git a/src/client_side.cc b/src/client_side.cc index ee43129ca0..15e4ed3428 100644 --- a/src/client_side.cc +++ b/src/client_side.cc @@ -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); diff --git a/src/client_side.h b/src/client_side.h index 4a67203f75..85a67954c3 100644 --- a/src/client_side.h +++ b/src/client_side.h @@ -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