From 44827f50c72aa75ad9b2ad6c9f77948e63092017 Mon Sep 17 00:00:00 2001 From: Dridi Boukelmoune Date: Fri, 15 Mar 2024 18:14:58 +0100 Subject: [PATCH] hash: New HSH_CheckBans() convenience --- bin/varnishd/cache/cache_hash.c | 34 +++++++++++++++++++++++++++++- bin/varnishd/cache/cache_objhead.h | 1 + 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c index 8627c7a95f5..102cb582bfd 100644 --- a/bin/varnishd/cache/cache_hash.c +++ b/bin/varnishd/cache/cache_hash.c @@ -276,6 +276,38 @@ hsh_testmagic(void *result) fprintf(stderr, ">\n"); } +/*--------------------------------------------------------------------- + */ + +static int +hsh_check_bans_locked(struct worker *wrk, struct objcore *oc, struct req *req) +{ + struct objhead *oh; + + oh = oc->objhead; + Lck_AssertHeld(&oh->mtx); + + return (BAN_CheckObject(wrk, oc, req) > 0); +} + +void +HSH_CheckBans(struct worker *wrk, struct objcore *oc) +{ + struct objhead *oh; + + CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); + CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); + oh = oc->objhead; + CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC); + + Lck_Lock(&oh->mtx); + if (hsh_check_bans_locked(wrk, oc, NULL)) { + oc->flags |= OC_F_DYING; + EXP_Remove(oc, NULL); + } + Lck_Unlock(&oh->mtx); +} + /*--------------------------------------------------------------------- * Insert an object which magically appears out of nowhere or, more likely, * comes off some persistent storage device. @@ -451,7 +483,7 @@ HSH_Lookup(struct req *req, struct objcore **ocp, struct objcore **bocp) if (oc->ttl <= 0.) continue; - if (BAN_CheckObject(wrk, oc, req)) { + if (hsh_check_bans_locked(wrk, oc, req)) { oc->flags |= OC_F_DYING; EXP_Remove(oc, NULL); continue; diff --git a/bin/varnishd/cache/cache_objhead.h b/bin/varnishd/cache/cache_objhead.h index 2edfb5a883b..1821a3b59b4 100644 --- a/bin/varnishd/cache/cache_objhead.h +++ b/bin/varnishd/cache/cache_objhead.h @@ -86,3 +86,4 @@ unsigned HSH_Purge(struct worker *, struct objhead *, vtim_real ttl_now, vtim_dur ttl, vtim_dur grace, vtim_dur keep); struct objcore *HSH_Private(const struct worker *wrk); void HSH_Cancel(struct worker *, struct objcore *, struct boc *); +void HSH_CheckBans(struct worker *, struct objcore *);