[master] adc4d89 Don't let default probes complicate symbol table

Poul-Henning Kamp phk at FreeBSD.org
Tue Jan 30 00:13:06 UTC 2018


commit adc4d89ef1a9a124154f4be495779dac9128d7d2
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Jan 29 23:39:42 2018 +0000

    Don't let default probes complicate symbol table

diff --git a/lib/libvcc/vcc_backend.c b/lib/libvcc/vcc_backend.c
index db4d11c..30e816a 100644
--- a/lib/libvcc/vcc_backend.c
+++ b/lib/libvcc/vcc_backend.c
@@ -249,7 +249,6 @@ vcc_ParseProbeSpec(struct vcc *tl, const struct symbol *sym, char **name)
 void
 vcc_ParseProbe(struct vcc *tl)
 {
-	struct token *t_probe;
 	struct symbol *sym;
 	char *p;
 
@@ -257,15 +256,16 @@ vcc_ParseProbe(struct vcc *tl)
 
 	vcc_ExpectVid(tl, "backend probe");	/* ID: name */
 	ERRCHK(tl);
-	t_probe = tl->t;
-	sym = VCC_HandleSymbol(tl, PROBE, "vgc_probe");
-
-	ERRCHK(tl);
-	AN(sym);
-
-	vcc_ParseProbeSpec(tl, sym, &p);
-	if (vcc_IdIs(t_probe, "default"))
-		tl->default_probe = sym;
+	if (vcc_IdIs(tl->t, "default")) {
+		vcc_NextToken(tl);
+		vcc_ParseProbeSpec(tl, NULL, &p);
+		tl->default_probe = p;
+	} else {
+		sym = VCC_HandleSymbol(tl, PROBE, "vgc_probe");
+		ERRCHK(tl);
+		AN(sym);
+		vcc_ParseProbeSpec(tl, sym, &p);
+	}
 }
 
 /*--------------------------------------------------------------------
@@ -389,11 +389,21 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be, const char *vgcname)
 			Fb(tl, 0, "\t.probe = %s,\n", p);
 			ERRCHK(tl);
 		} else if (vcc_IdIs(t_field, "probe") && tl->t->tok == ID) {
-			pb = VCC_SymbolGet(tl, SYM_PROBE, "Probe not found",
-			    XREF_REF);
-			ERRCHK(tl);
-			AN(pb);
-			Fb(tl, 0, "\t.probe = %s,\n", pb->rname);
+			if (vcc_IdIs(tl->t, "default")) {
+				if (tl->default_probe == NULL) {
+					VSB_printf(tl->sb,
+					    "No default probe defined\n");
+					vcc_ErrToken(tl, tl->t);
+					VSB_printf(tl->sb, " at\n");
+					vcc_ErrWhere(tl, tl->t);
+				}
+			} else {
+				pb = VCC_SymbolGet(tl, SYM_PROBE,
+				    "Probe not found", XREF_REF);
+				ERRCHK(tl);
+				AN(pb);
+				Fb(tl, 0, "\t.probe = %s,\n", pb->rname);
+			}
 			vcc_NextToken(tl);
 			SkipToken(tl, ';');
 		} else if (vcc_IdIs(t_field, "probe")) {
diff --git a/lib/libvcc/vcc_compile.c b/lib/libvcc/vcc_compile.c
index 95e5b76..1dc52ae 100644
--- a/lib/libvcc/vcc_compile.c
+++ b/lib/libvcc/vcc_compile.c
@@ -418,8 +418,7 @@ EmitStruct(const struct vcc *tl)
 	Fc(tl, 0, "\t.default_director = &%s,\n",
 	   tl->default_director->rname);
 	if (tl->default_probe != NULL)
-		Fc(tl, 0, "\t.default_probe = %s,\n",
-		    tl->default_probe->rname);
+		Fc(tl, 0, "\t.default_probe = %s,\n", tl->default_probe);
 	Fc(tl, 0, "\t.ref = VGC_ref,\n");
 	Fc(tl, 0, "\t.nref = VGC_NREFS,\n");
 	Fc(tl, 0, "\t.nsrc = VGC_NSRCS,\n");
@@ -614,8 +613,6 @@ vcc_CompileSource(struct vcc *tl, struct source *sp)
 
 	/* Refcount the default director & probe*/
 	tl->default_director->nref++;
-	if (tl->default_probe != NULL)
-		tl->default_probe->nref++;
 
 	/* Check for orphans */
 	if (vcc_CheckReferences(tl))
diff --git a/lib/libvcc/vcc_compile.h b/lib/libvcc/vcc_compile.h
index 40d9f1b..e401fec 100644
--- a/lib/libvcc/vcc_compile.h
+++ b/lib/libvcc/vcc_compile.h
@@ -220,7 +220,7 @@ struct vcc {
 
 	int			ndirector;
 	struct symbol		*default_director;
-	struct symbol		*default_probe;
+	char			*default_probe;
 
 	unsigned		unique;
 


More information about the varnish-commit mailing list