[6.0] 0f0464411 Simplify HSH_Lookup 4/4
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Fri Feb 8 13:13:11 UTC 2019
commit 0f0464411a7db6395fefec185e2a24df42ddb2b3
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Dec 4 23:45:27 2018 +0000
Simplify HSH_Lookup 4/4
Simplify the !busy cases
Inspired by: #2856
diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index 94b7d2dd9..197ebc4c7 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -346,7 +346,6 @@ HSH_Lookup(struct req *req, struct objcore **ocp, struct objcore **bocp)
struct objcore *exp_oc;
double exp_t_origin;
int busy_found;
- enum lookup_e retval;
const uint8_t *vary;
unsigned xid = 0;
float dttl = 0.0;
@@ -448,6 +447,8 @@ HSH_Lookup(struct req *req, struct objcore **ocp, struct objcore **bocp)
/* record the newest object */
exp_oc = oc;
exp_t_origin = oc->t_origin;
+ assert(oh->refcnt > 1);
+ assert(exp_oc->objhead == oh);
}
}
@@ -489,43 +490,31 @@ HSH_Lookup(struct req *req, struct objcore **ocp, struct objcore **bocp)
dttl = EXP_Dttl(req, exp_oc);
*bocp = hsh_insert_busyobj(wrk, oh);
Lck_Unlock(&oh->mtx);
-
wrk->stats->cache_hitmiss++;
VSLb(req->vsl, SLT_HitMiss, "%u %.6f", xid, dttl);
return (HSH_HITMISS);
}
if (!busy_found) {
- /* Insert objcore in objecthead */
*bocp = hsh_insert_busyobj(wrk, oh);
if (exp_oc != NULL) {
- assert(oh->refcnt > 1);
- assert(exp_oc->objhead == oh);
exp_oc->refcnt++;
- Lck_Unlock(&oh->mtx);
*ocp = exp_oc;
-
- if (EXP_Ttl_grace(req, exp_oc) < req->t_req) {
- retval = HSH_MISS;
- } else {
+ if (EXP_Ttl_grace(req, exp_oc) > req->t_req) {
if (exp_oc->hits < LONG_MAX)
exp_oc->hits++;
- retval = HSH_GRACE;
+ Lck_Unlock(&oh->mtx);
+ return (HSH_GRACE);
}
- } else {
- Lck_Unlock(&oh->mtx);
- retval = HSH_MISS;
}
-
- return (retval);
+ Lck_Unlock(&oh->mtx);
+ return (HSH_MISS);
}
AN(busy_found);
if (exp_oc != NULL && EXP_Ttl_grace(req, exp_oc) >= req->t_req) {
/* we do not wait on the busy object if in grace */
- assert(oh->refcnt > 1);
- assert(exp_oc->objhead == oh);
exp_oc->refcnt++;
*ocp = exp_oc;
if (exp_oc->hits < LONG_MAX)
More information about the varnish-commit
mailing list