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);
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)
{
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);
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;
/// \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