[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