[master] 7a30f9f introduce a bitfield for vsm client segment flags

Nils Goroll nils.goroll at uplex.de
Fri Jan 19 08:48:08 UTC 2018


commit 7a30f9f19ea3c15da1c696a94899709f240b2ac4
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Thu Jan 18 07:52:12 2018 +0100

    introduce a bitfield for vsm client segment flags

diff --git a/lib/libvarnishapi/vsm.c b/lib/libvarnishapi/vsm.c
index 45aa6ce..b63684f 100644
--- a/lib/libvarnishapi/vsm.c
+++ b/lib/libvarnishapi/vsm.c
@@ -76,9 +76,10 @@ struct vsm_set;
 struct vsm_seg {
 	unsigned		magic;
 #define VSM_SEG_MAGIC		0xeb6c6dfd
+	unsigned		flags;
+#define VSM_FLAG_MARKSCAN	(1U<<0)
+#define VSM_FLAG_STALE		(1U<<1)
 	VTAILQ_ENTRY(vsm_seg)	list;
-	int			markscan;
-	int			stale;
 	struct vsm_set		*set;
 	char			**av;
 	int			refs;
@@ -219,7 +220,7 @@ vsm_delseg(struct vsm_seg *vg)
 	if (vg->b != NULL)
 		vsm_unmapseg(vg);
 
-	if (vg->stale)
+	if (vg->flags & VSM_FLAG_STALE)
 		VTAILQ_REMOVE(&vg->set->stale, vg, list);
 	else
 		VTAILQ_REMOVE(&vg->set->segs, vg, list);
@@ -487,7 +488,7 @@ vsm_refresh_set2(struct vsm *vd, struct vsm_set *vs, struct vsb *vsb)
 	p = VSB_data(vsb) + ac;
 
 	VTAILQ_FOREACH(vg, &vs->segs, list)
-		vg->markscan = 0;
+		vg->flags &= ~VSM_FLAG_MARKSCAN;
 
 	/*
 	 * Efficient comparison by walking the two lists side-by-side because
@@ -527,7 +528,7 @@ vsm_refresh_set2(struct vsm *vd, struct vsm_set *vs, struct vsb *vsb)
 			AN(vg2);
 			vg2->av = av;
 			vg2->set = vs;
-			vg2->markscan = 1;
+			vg2->flags = VSM_FLAG_MARKSCAN;
 			vg2->serial = ++vd->serial;
 			VTAILQ_INSERT_TAIL(&vs->segs, vg2, list);
 			continue;
@@ -542,7 +543,7 @@ vsm_refresh_set2(struct vsm *vd, struct vsm_set *vs, struct vsb *vsb)
 			continue;
 
 		/* entry compared equal, so it survives */
-		vg->markscan = 1;
+		vg->flags |= VSM_FLAG_MARKSCAN;
 		vg = VTAILQ_NEXT(vg, list);
 	}
 	return (retval);
@@ -558,10 +559,11 @@ vsm_refresh_set(struct vsm *vd, struct vsm_set *vs, struct vsb *vsb)
 	if (retval & VSM_NUKE_ALL)
 		retval |= VSM_MGT_CHANGED;
 	VTAILQ_FOREACH_SAFE(vg, &vs->segs, list, vg2) {
-		if (!vg->markscan || (retval & VSM_NUKE_ALL)) {
+		if ((vg->flags & VSM_FLAG_MARKSCAN) == 0 ||
+		    (retval & VSM_NUKE_ALL)) {
 			VTAILQ_REMOVE(&vs->segs, vg, list);
 			if (vg->refs) {
-				vg->stale = 1;
+				vg->flags |= VSM_FLAG_STALE;
 				VTAILQ_INSERT_TAIL(&vs->stale, vg, list);
 			} else {
 				VAV_Free(vg->av);
@@ -793,7 +795,7 @@ VSM_Unmap(struct vsm *vd, struct vsm_fantom *vf)
 	if (vg->refs > 0)
 		return(0);
 	vsm_unmapseg(vg);
-	if (vg->stale)
+	if (vg->flags & VSM_FLAG_STALE)
 		vsm_delseg(vg);
 	return (0);
 }
@@ -808,7 +810,7 @@ VSM_StillValid(const struct vsm *vd, const struct vsm_fantom *vf)
 	CHECK_OBJ_NOTNULL(vd, VSM_MAGIC);
 	AN(vf);
 	vg = vsm_findseg(vd, vf);
-	if (vg == NULL || vg->stale)
+	if (vg == NULL || vg->flags & VSM_FLAG_STALE)
 		return (VSM_invalid);
 	return (VSM_valid);
 }


More information about the varnish-commit mailing list