[experimental-ims] e556146 More deref-reduction:

Poul-Henning Kamp phk at FreeBSD.org
Thu Dec 18 10:27:41 CET 2014


commit e556146d8bca01cf714a0594e4454d725a2154c9
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Mar 12 15:48:43 2012 +0000

    More deref-reduction:
    
    VRY only needs req, not sess.
    Overlooked some lingering sp->wrk's in HSH_Lookup()

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 99c66c3..6aceab0 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -954,8 +954,8 @@ void RES_BuildHttp(const struct sess *sp);
 void RES_WriteObj(struct sess *sp);
 
 /* cache_vary.c */
-struct vsb *VRY_Create(const struct sess *sp, const struct http *hp);
-int VRY_Match(const struct sess *sp, const uint8_t *vary);
+struct vsb *VRY_Create(struct req *sp, const struct http *hp);
+int VRY_Match(struct req *, const uint8_t *vary);
 void VRY_Validate(const uint8_t *vary);
 
 /* cache_vcl.c */
diff --git a/bin/varnishd/cache/cache_center.c b/bin/varnishd/cache/cache_center.c
index 4d18395..1192f81 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -784,7 +784,7 @@ cnt_prepfetch(struct sess *sp, struct worker *wrk, struct req *req)
 	/* Create Vary instructions */
 	if (req->objcore != NULL) {
 		CHECK_OBJ_NOTNULL(req->objcore, OBJCORE_MAGIC);
-		vary = VRY_Create(sp, bo->beresp);
+		vary = VRY_Create(req, bo->beresp);
 		if (vary != NULL) {
 			varyl = VSB_len(vary);
 			assert(varyl > 0);
diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index 55215e6..34e86a4 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -302,9 +302,9 @@ HSH_Lookup(struct sess *sp)
 	AN(hash);
 
 	hsh_prealloc(wrk);
-	memcpy(sp->wrk->nobjhead->digest, req->digest, sizeof req->digest);
+	memcpy(wrk->nobjhead->digest, req->digest, sizeof req->digest);
 	if (cache_param->diag_bitmap & 0x80000000)
-		hsh_testmagic(sp->wrk->nobjhead->digest);
+		hsh_testmagic(wrk->nobjhead->digest);
 
 	if (req->hash_objhead != NULL) {
 		/*
@@ -339,21 +339,21 @@ HSH_Lookup(struct sess *sp)
 				continue;
 
 			if (oc->busyobj->vary != NULL &&
-			    !VRY_Match(sp, oc->busyobj->vary))
+			    !VRY_Match(req, oc->busyobj->vary))
 				continue;
 
 			busy_oc = oc;
 			continue;
 		}
 
-		o = oc_getobj(&sp->wrk->stats, oc);
+		o = oc_getobj(&wrk->stats, oc);
 		CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
 
 		if (o->exp.ttl <= 0.)
 			continue;
 		if (BAN_CheckObject(o, sp))
 			continue;
-		if (o->vary != NULL && !VRY_Match(sp, o->vary))
+		if (o->vary != NULL && !VRY_Match(req, o->vary))
 			continue;
 
 		/* If still valid, use it */
@@ -390,14 +390,14 @@ HSH_Lookup(struct sess *sp)
 	    && (busy_oc != NULL		/* Somebody else is already busy */
 	    || !VDI_Healthy(req->director, sp))) {
 					/* Or it is impossible to fetch */
-		o = oc_getobj(&sp->wrk->stats, grace_oc);
+		o = oc_getobj(&wrk->stats, grace_oc);
 		CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
 		oc = grace_oc;
 	}
 	req->objcore = NULL;
 
 	if (oc != NULL && !req->hash_always_miss) {
-		o = oc_getobj(&sp->wrk->stats, oc);
+		o = oc_getobj(&wrk->stats, oc);
 		CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
 		assert(oc->objhead == oh);
 
@@ -414,11 +414,11 @@ HSH_Lookup(struct sess *sp)
 	if (busy_oc != NULL) {
 		/* There are one or more busy objects, wait for them */
 		if (req->esi_level == 0) {
-			CHECK_OBJ_NOTNULL(sp->wrk->nwaitinglist,
+			CHECK_OBJ_NOTNULL(wrk->nwaitinglist,
 			    WAITINGLIST_MAGIC);
 			if (oh->waitinglist == NULL) {
-				oh->waitinglist = sp->wrk->nwaitinglist;
-				sp->wrk->nwaitinglist = NULL;
+				oh->waitinglist = wrk->nwaitinglist;
+				wrk->nwaitinglist = NULL;
 			}
 			VTAILQ_INSERT_TAIL(&oh->waitinglist->list, sp, list);
 		}
diff --git a/bin/varnishd/cache/cache_vary.c b/bin/varnishd/cache/cache_vary.c
index 7ba9c60..a7bb31c 100644
--- a/bin/varnishd/cache/cache_vary.c
+++ b/bin/varnishd/cache/cache_vary.c
@@ -60,7 +60,7 @@
 #include "vend.h"
 
 struct vsb *
-VRY_Create(const struct sess *sp, const struct http *hp)
+VRY_Create(struct req *req, const struct http *hp)
 {
 	char *v, *p, *q, *h, *e;
 	struct vsb *sb, *sbh;
@@ -79,7 +79,7 @@ VRY_Create(const struct sess *sp, const struct http *hp)
 	AN(sbh);
 
 	if (*v == ':') {
-		VSLb(sp->req->vsl, SLT_Error,
+		VSLb(req->vsl, SLT_Error,
 		    "Vary header had extra ':', fix backend");
 		v++;
 	}
@@ -97,7 +97,7 @@ VRY_Create(const struct sess *sp, const struct http *hp)
 		    (char)(1 + (q - p)), (int)(q - p), p, 0);
 		AZ(VSB_finish(sbh));
 
-		if (http_GetHdr(sp->req->http, VSB_data(sbh), &h)) {
+		if (http_GetHdr(req->http, VSB_data(sbh), &h)) {
 			AZ(vct_issp(*h));
 			/* Trim trailing space */
 			e = strchr(h, '\0');
@@ -175,9 +175,9 @@ vry_cmp(const uint8_t *v1, const uint8_t *v2)
 }
 
 int
-VRY_Match(const struct sess *sp, const uint8_t *vary)
+VRY_Match(struct req *req, const uint8_t *vary)
 {
-	uint8_t *vsp = sp->req->vary_b;
+	uint8_t *vsp = req->vary_b;
 	char *h, *e;
 	unsigned lh, ln;
 	int i, retval = 1, oflo = 0;
@@ -188,7 +188,7 @@ VRY_Match(const struct sess *sp, const uint8_t *vary)
 		if (i == 1) {
 			/* Build a new entry */
 
-			i = http_GetHdr(sp->req->http,
+			i = http_GetHdr(req->http,
 			    (const char*)(vary+2), &h);
 			if (i) {
 				/* Trim trailing space */
@@ -204,8 +204,8 @@ VRY_Match(const struct sess *sp, const uint8_t *vary)
 
 			/* Length of the entire new vary entry */
 			ln = 2 + vary[2] + 2 + (lh == 0xffff ? 0 : lh);
-			if (vsp + ln >= sp->req->vary_e) {
-				vsp = sp->req->vary_b;
+			if (vsp + ln >= req->vary_e) {
+				vsp = req->vary_b;
 				oflo = 1;
 			}
 
@@ -213,7 +213,7 @@ VRY_Match(const struct sess *sp, const uint8_t *vary)
 			 * We MUST have space for one entry and the end marker
 			 * after it, which prevents old junk from confusing us
 			 */
-			assert(vsp + ln + 2 < sp->req->vary_e);
+			assert(vsp + ln + 2 < req->vary_e);
 
 			vbe16enc(vsp, (uint16_t)lh);
 			memcpy(vsp + 2, vary + 2, vary[2] + 2);
@@ -231,20 +231,20 @@ VRY_Match(const struct sess *sp, const uint8_t *vary)
 		vsp += vry_len(vsp);
 		vary += vry_len(vary);
 	}
-	if (vsp + 3 > sp->req->vary_e)
+	if (vsp + 3 > req->vary_e)
 		oflo = 1;
 
 	if (oflo) {
 		/* XXX: Should log this */
-		vsp = sp->req->vary_b;
+		vsp = req->vary_b;
 	}
 	vsp[0] = 0xff;
 	vsp[1] = 0xff;
 	vsp[2] = 0;
 	if (oflo)
-		sp->req->vary_l = NULL;
+		req->vary_l = NULL;
 	else
-		sp->req->vary_l = vsp + 3;
+		req->vary_l = vsp + 3;
 	return (retval);
 }
 



More information about the varnish-commit mailing list