[master] e8ce24cb9 Collapse the VFP and VDP filter repository lists to a single list.

Poul-Henning Kamp phk at FreeBSD.org
Wed Dec 1 10:10:09 UTC 2021


commit e8ce24cb942b5a3e207a96919927235a1ac27c06
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Dec 1 08:54:42 2021 +0000

    Collapse the VFP and VDP filter repository lists to a single list.

diff --git a/bin/varnishd/cache/cache_vcl.c b/bin/varnishd/cache/cache_vcl.c
index 48ee357ba..50c1228ba 100644
--- a/bin/varnishd/cache/cache_vcl.c
+++ b/bin/varnishd/cache/cache_vcl.c
@@ -516,8 +516,7 @@ VCL_Close(struct vcl **vclp)
 	struct vcl *vcl;
 
 	TAKE_OBJ_NOTNULL(vcl, vclp, VCL_MAGIC);
-	assert(VTAILQ_EMPTY(&vcl->vfps));
-	assert(VTAILQ_EMPTY(&vcl->vdps));
+	assert(VTAILQ_EMPTY(&vcl->filters));
 	AZ(dlclose(vcl->dlh));
 	FREE_OBJ(vcl);
 }
@@ -685,8 +684,7 @@ vcl_load(struct cli *cli,
 	XXXAN(vcl->loaded_name);
 	VTAILQ_INIT(&vcl->director_list);
 	VTAILQ_INIT(&vcl->ref_list);
-	VTAILQ_INIT(&vcl->vfps);
-	VTAILQ_INIT(&vcl->vdps);
+	VTAILQ_INIT(&vcl->filters);
 
 	vcl->temp = VCL_TEMP_INIT;
 
diff --git a/bin/varnishd/cache/cache_vcl.h b/bin/varnishd/cache/cache_vcl.h
index ac0d7aa75..d8827b667 100644
--- a/bin/varnishd/cache/cache_vcl.h
+++ b/bin/varnishd/cache/cache_vcl.h
@@ -55,8 +55,7 @@ struct vcl {
 	int			nrefs;
 	struct vcl		*label;
 	int			nlabels;
-	struct vfilter_head	vfps;
-	struct vfilter_head	vdps;
+	struct vfilter_head	filters;
 };
 
 struct vclref {
diff --git a/bin/varnishd/cache/cache_vrt_filter.c b/bin/varnishd/cache/cache_vrt_filter.c
index cab61ea74..d5962c7c6 100644
--- a/bin/varnishd/cache/cache_vrt_filter.c
+++ b/bin/varnishd/cache/cache_vrt_filter.c
@@ -57,17 +57,14 @@ struct vfilter {
 	VTAILQ_ENTRY(vfilter)		list;
 };
 
-static struct vfilter_head vfp_filters =
-    VTAILQ_HEAD_INITIALIZER(vfp_filters);
-
-static struct vfilter_head vdp_filters =
-    VTAILQ_HEAD_INITIALIZER(vdp_filters);
+static struct vfilter_head vrt_filters =
+    VTAILQ_HEAD_INITIALIZER(vrt_filters);
 
 void
 VRT_AddVFP(VRT_CTX, const struct vfp *filter)
 {
 	struct vfilter *vp;
-	struct vfilter_head *hd = &vfp_filters;
+	struct vfilter_head *hd = &vrt_filters;
 
 	CHECK_OBJ_ORNULL(ctx, VRT_CTX_MAGIC);
 	AN(filter);
@@ -75,14 +72,18 @@ VRT_AddVFP(VRT_CTX, const struct vfp *filter)
 	AN(*filter->name);
 
 	VTAILQ_FOREACH(vp, hd, list) {
+                if (vp->vfp == NULL)
+			continue;
 		xxxassert(vp->vfp != filter);
 		xxxassert(strcasecmp(vp->name, filter->name));
 	}
 	if (ctx != NULL) {
 		ASSERT_CLI();
 		CHECK_OBJ_NOTNULL(ctx->vcl, VCL_MAGIC);
-		hd = &ctx->vcl->vfps;
+		hd = &ctx->vcl->filters;
 		VTAILQ_FOREACH(vp, hd, list) {
+			if (vp->vfp == NULL)
+				continue;
 			xxxassert(vp->vfp != filter);
 			xxxassert(strcasecmp(vp->name, filter->name));
 		}
@@ -99,7 +100,7 @@ void
 VRT_AddVDP(VRT_CTX, const struct vdp *filter)
 {
 	struct vfilter *vp;
-	struct vfilter_head *hd = &vdp_filters;
+	struct vfilter_head *hd = &vrt_filters;
 
 	CHECK_OBJ_ORNULL(ctx, VRT_CTX_MAGIC);
 	AN(filter);
@@ -107,14 +108,18 @@ VRT_AddVDP(VRT_CTX, const struct vdp *filter)
 	AN(*filter->name);
 
 	VTAILQ_FOREACH(vp, hd, list) {
+                if (vp->vdp == NULL)
+			continue;
 		xxxassert(vp->vdp != filter);
 		xxxassert(strcasecmp(vp->name, filter->name));
 	}
 	if (ctx != NULL) {
 		ASSERT_CLI();
 		CHECK_OBJ_NOTNULL(ctx->vcl, VCL_MAGIC);
-		hd = &ctx->vcl->vdps;
+		hd = &ctx->vcl->filters;
 		VTAILQ_FOREACH(vp, hd, list) {
+			if (vp->vdp == NULL)
+				continue;
 			xxxassert(vp->vdp != filter);
 			xxxassert(strcasecmp(vp->name, filter->name));
 		}
@@ -135,7 +140,7 @@ VRT_RemoveVFP(VRT_CTX, const struct vfp *filter)
 
 	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(ctx->vcl, VCL_MAGIC);
-	hd = &ctx->vcl->vfps;
+	hd = &ctx->vcl->filters;
 	AN(filter);
 	AN(filter->name);
 	AN(*filter->name);
@@ -159,7 +164,7 @@ VRT_RemoveVDP(VRT_CTX, const struct vdp *filter)
 
 	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(ctx->vcl, VCL_MAGIC);
-	hd = &ctx->vcl->vdps;
+	hd = &ctx->vcl->filters;
 	AN(filter);
 	AN(filter->name);
 	AN(*filter->name);
@@ -179,7 +184,7 @@ static const struct vfilter vfilter_error[1];
 
 // XXX: idea(fgs): Allow filters (...) arguments in the list
 static const struct vfilter *
-vcl_filter_list_iter(const struct vfilter_head *h1,
+vcl_filter_list_iter(int want_vfp, const struct vfilter_head *h1,
     const struct vfilter_head *h2, const char **flp)
 {
 	const char *fl, *q;
@@ -201,12 +206,22 @@ vcl_filter_list_iter(const struct vfilter_head *h1,
 	for (q = fl; *q && !vct_isspace(*q); q++)
 		continue;
 	*flp = q;
-	VTAILQ_FOREACH(vp, h1, list)
+	VTAILQ_FOREACH(vp, h1, list) {
+		if (want_vfp && vp->vfp == NULL)
+			continue;
+		else if (!want_vfp && vp->vdp == NULL)
+			continue;
 		if (vp->nlen == q - fl && !memcmp(fl, vp->name, vp->nlen))
 			return (vp);
-	VTAILQ_FOREACH(vp, h2, list)
+	}
+	VTAILQ_FOREACH(vp, h2, list) {
+		if (want_vfp && vp->vfp == NULL)
+			continue;
+		else if (!want_vfp && vp->vdp == NULL)
+			continue;
 		if (vp->nlen == q - fl && !memcmp(fl, vp->name, vp->nlen))
 			return (vp);
+	}
 	*flp = fl;
 	return (vfilter_error);
 }
@@ -220,7 +235,7 @@ VCL_StackVFP(struct vfp_ctx *vc, const struct vcl *vcl, const char *fl)
 	VSLb(vc->wrk->vsl, SLT_Filters, "%s", fl);
 
 	while (1) {
-		vp = vcl_filter_list_iter(&vfp_filters, &vcl->vfps, &fl);
+		vp = vcl_filter_list_iter(1, &vrt_filters, &vcl->filters, &fl);
 		if (vp == NULL)
 			return (0);
 		if (vp == vfilter_error)
@@ -238,7 +253,7 @@ VCL_StackVDP(struct req *req, const struct vcl *vcl, const char *fl)
 	AN(fl);
 	VSLb(req->vsl, SLT_Filters, "%s", fl);
 	while (1) {
-		vp = vcl_filter_list_iter(&vdp_filters, &vcl->vdps, &fl);
+		vp = vcl_filter_list_iter(0, &vrt_filters, &vcl->filters, &fl);
 		if (vp == NULL)
 			return (0);
 		if (vp == vfilter_error) {


More information about the varnish-commit mailing list