]> git.ipfire.org Git - thirdparty/squid.git/commit
Fix PeerDigest lifetime management (#1857)
authorEduard Bagdasaryan <eduard.bagdasaryan@measurement-factory.com>
Mon, 8 Jul 2024 21:58:29 +0000 (21:58 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Wed, 10 Jul 2024 06:02:07 +0000 (06:02 +0000)
commitf036532e9c0691fe41d7a7c2f50ea5f3e257c882
tree29cf5aa473ac8f7615cd44613455bdf90c8a4462
parentf69f4cee5cbe44bf60f8acb30b777a24e631d8ff
Fix PeerDigest lifetime management (#1857)

This change fixes how cbdata is used for managing CachePeer::digest
lifetime. Prior to these changes, cbdata was (ab)used as a reference
counting mechanism: CachePeer::digest object could outlive CachePeer
(effectively its creator), necessitating complex "is it time to delete
this digest?" cleanup logic. Now, CachePeer is an exclusive digest owner
that no longer locks/unlocks its digest field; it just creates/deletes
the object. Digest fetching code no longer needs to cleanup the digest.

"CachePeer::digest is always valid" invariant simplifies digest fetching
code and, hopefully, reduces the probability of bugs similar to Bug 5329
fixed in minimal commit 4657405 (that promised this refactoring).
src/CachePeer.cc
src/PeerDigest.h
src/cache_cf.cc
src/peer_digest.cc