From: Eduard Bagdasaryan Date: Sat, 3 Jun 2023 16:46:17 +0000 (+0000) Subject: Destroy an idle PeerDigest after its CachePeer disappears (#1372) X-Git-Tag: SQUID_7_0_1~432 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=97269a72c4333939d0681f3810bfbc859d608d06;p=thirdparty%2Fsquid.git Destroy an idle PeerDigest after its CachePeer disappears (#1372) Delaying this destruction until the next peerDigestCheck() event results in accumulation of PeerDigests (and related objects) during frequent reconfigurations. --- diff --git a/src/CachePeer.cc b/src/CachePeer.cc index 1a5ea04bc2..01db8ab24e 100644 --- a/src/CachePeer.cc +++ b/src/CachePeer.cc @@ -13,6 +13,7 @@ #include "neighbors.h" #include "NeighborTypeDomainList.h" #include "pconn.h" +#include "PeerDigest.h" #include "PeerPoolMgr.h" #include "SquidConfig.h" #include "util.h" @@ -40,7 +41,9 @@ CachePeer::~CachePeer() aclDestroyAccessList(&access); #if USE_CACHE_DIGESTS - cbdataReferenceDone(digest); + void *digestTmp = nullptr; + if (cbdataReferenceValidDone(digest, &digestTmp)) + peerDigestNotePeerGone(static_cast(digestTmp)); xfree(digest_url); #endif diff --git a/src/peer_digest.cc b/src/peer_digest.cc index e8648c6d5a..45f9e07150 100644 --- a/src/peer_digest.cc +++ b/src/peer_digest.cc @@ -167,6 +167,8 @@ peerDigestDestroy(PeerDigest * pd) PeerDigest::~PeerDigest() { + if (times.next_check && eventFind(peerDigestCheck, this)) + eventDelete(peerDigestCheck, this); delete cd; // req_result pointer is not owned by us }