[master] 04c4043 Use vrt_ctx also for init/fini
Poul-Henning Kamp
phk at FreeBSD.org
Thu Sep 25 10:32:17 CEST 2014
commit 04c40433c0f05f4605a62aa2005f58f2306bd00d
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Thu Sep 25 08:32:00 2014 +0000
Use vrt_ctx also for init/fini
diff --git a/bin/varnishd/cache/cache_backend.c b/bin/varnishd/cache/cache_backend.c
index f40c5d1..7c25563 100644
--- a/bin/varnishd/cache/cache_backend.c
+++ b/bin/varnishd/cache/cache_backend.c
@@ -517,12 +517,12 @@ vdi_simple_finish(const struct director *d, struct worker *wrk,
/*--------------------------------------------------------------------*/
void
-VRT_fini_dir(struct cli *cli, struct director *d)
+VRT_fini_dir(const struct vrt_ctx *ctx, struct director *d)
{
struct vdi_simple *vs;
- (void)cli;
ASSERT_CLI();
+ CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(d, DIRECTOR_MAGIC);
CAST_OBJ_NOTNULL(vs, d->priv, VDI_SIMPLE_MAGIC);
@@ -534,13 +534,14 @@ VRT_fini_dir(struct cli *cli, struct director *d)
}
void
-VRT_init_dir(struct cli *cli, struct director **bp, int idx, const void *priv)
+VRT_init_dir(const struct vrt_ctx *ctx, struct director **bp, int idx,
+ const void *priv)
{
const struct vrt_backend *t;
struct vdi_simple *vs;
ASSERT_CLI();
- (void)cli;
+ CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
t = priv;
ALLOC_OBJ(vs, VDI_SIMPLE_MAGIC);
@@ -557,7 +558,7 @@ VRT_init_dir(struct cli *cli, struct director **bp, int idx, const void *priv)
vs->vrt = t;
- vs->backend = VBE_AddBackend(cli, t);
+ vs->backend = VBE_AddBackend(NULL, t);
if (vs->vrt->probe != NULL)
VBP_Insert(vs->backend, vs->vrt->probe, vs->vrt->hosthdr);
diff --git a/bin/varnishd/cache/cache_vcl.c b/bin/varnishd/cache/cache_vcl.c
index 245a1c1..0aa40fe 100644
--- a/bin/varnishd/cache/cache_vcl.c
+++ b/bin/varnishd/cache/cache_vcl.c
@@ -180,9 +180,6 @@ VCL_Load(const char *fn, const char *name, struct cli *cli)
ASSERT_CLI();
- memset(&ctx, 0, sizeof ctx);
- ctx.magic = VRT_CTX_MAGIC;
-
vcl = vcl_find(name);
if (vcl != NULL) {
VCLI_Out(cli, "Config '%s' already loaded", name);
@@ -214,17 +211,26 @@ VCL_Load(const char *fn, const char *name, struct cli *cli)
FREE_OBJ(vcl);
return (1);
}
- if (vcl->conf->init_vcl(cli)) {
+
+ memset(&ctx, 0, sizeof ctx);
+ ctx.magic = VRT_CTX_MAGIC;
+ ctx.method = VCL_MET_INIT;
+ ctx.handling = &hand;
+ ctx.cli = cli;
+
+ if (vcl->conf->init_vcl(&ctx)) {
VCLI_Out(cli, "VCL \"%s\" Failed to initialize", name);
+ vcl->conf->fini_vcl(&ctx);
(void)dlclose(vcl->dlh);
FREE_OBJ(vcl);
return (1);
}
- ctx.method = VCL_MET_INIT;
- ctx.handling = &hand;
(void)vcl->conf->init_func(&ctx);
if (hand == VCL_RET_FAIL) {
VCLI_Out(cli, "VCL \"%s\" vcl_init{} failed", name);
+ ctx.method = VCL_MET_FINI;
+ (void)vcl->conf->fini_func(&ctx);
+ vcl->conf->fini_vcl(&ctx);
(void)dlclose(vcl->dlh);
FREE_OBJ(vcl);
return (1);
@@ -264,7 +270,7 @@ VCL_Nuke(struct vcls *vcl)
ctx.handling = &hand;
(void)vcl->conf->fini_func(&ctx);
assert(hand == VCL_RET_OK);
- vcl->conf->fini_vcl(NULL);
+ vcl->conf->fini_vcl(&ctx);
free(vcl->name);
(void)dlclose(vcl->dlh);
FREE_OBJ(vcl);
diff --git a/bin/varnishd/cache/cache_vrt_vmod.c b/bin/varnishd/cache/cache_vrt_vmod.c
index a2dc7c0..b1aef3e 100644
--- a/bin/varnishd/cache/cache_vrt_vmod.c
+++ b/bin/varnishd/cache/cache_vrt_vmod.c
@@ -63,7 +63,7 @@ static VTAILQ_HEAD(,vmod) vmods = VTAILQ_HEAD_INITIALIZER(vmods);
int
VRT_Vmod_Init(void **hdl, void *ptr, int len, const char *nm,
- const char *path, const char *file_id, struct cli *cli)
+ const char *path, const char *file_id, const struct vrt_ctx *ctx)
{
struct vmod *v;
const struct vmod_data *d;
@@ -71,12 +71,14 @@ VRT_Vmod_Init(void **hdl, void *ptr, int len, const char *nm,
void *dlhdl;
ASSERT_CLI();
+ CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+ AN(ctx->cli);
dlhdl = dlopen(path, RTLD_NOW | RTLD_LOCAL);
if (dlhdl == NULL) {
- VCLI_Out(cli, "Loading VMOD %s from %s:\n", nm, path);
- VCLI_Out(cli, "dlopen() failed: %s\n", dlerror());
- VCLI_Out(cli, "Check child process permissions.\n");
+ VCLI_Out(ctx->cli, "Loading VMOD %s from %s:\n", nm, path);
+ VCLI_Out(ctx->cli, "dlopen() failed: %s\n", dlerror());
+ VCLI_Out(ctx->cli, "Check child process permissions.\n");
return (1);
}
@@ -94,8 +96,9 @@ VRT_Vmod_Init(void **hdl, void *ptr, int len, const char *nm,
if (d == NULL ||
d->file_id == NULL ||
strcmp(d->file_id, file_id)) {
- VCLI_Out(cli, "Loading VMOD %s from %s:\n", nm, path);
- VCLI_Out(cli,
+ VCLI_Out(ctx->cli,
+ "Loading VMOD %s from %s:\n", nm, path);
+ VCLI_Out(ctx->cli,
"This is no longer the same file seen by"
" the VCL-compiler.\n");
(void)dlclose(v->hdl);
@@ -111,8 +114,9 @@ VRT_Vmod_Init(void **hdl, void *ptr, int len, const char *nm,
d->proto == NULL ||
d->spec == NULL ||
d->abi == NULL) {
- VCLI_Out(cli, "Loading VMOD %s from %s:\n", nm, path);
- VCLI_Out(cli, "VMOD data is mangled.\n");
+ VCLI_Out(ctx->cli,
+ "Loading VMOD %s from %s:\n", nm, path);
+ VCLI_Out(ctx->cli, "VMOD data is mangled.\n");
(void)dlclose(v->hdl);
FREE_OBJ(v);
return (1);
diff --git a/include/vrt.h b/include/vrt.h
index e8c322c..2d9a6be 100644
--- a/include/vrt.h
+++ b/include/vrt.h
@@ -89,6 +89,7 @@ struct vrt_ctx {
unsigned method;
unsigned *handling;
+ struct cli *cli; // Only in ...init()
struct vsl_log *vsl;
struct VCL_conf *vcl;
struct ws *ws;
@@ -223,15 +224,16 @@ void VRT_Rollback(const struct vrt_ctx *, const struct http *);
void VRT_synth_page(const struct vrt_ctx *, const char *, ...);
/* Backend related */
-void VRT_init_dir(struct cli *, struct director **, int idx, const void *priv);
-void VRT_fini_dir(struct cli *, struct director *);
+void VRT_init_dir(const struct vrt_ctx*, struct director **, int idx,
+ const void *priv);
+void VRT_fini_dir(const struct vrt_ctx*, struct director *);
/* Suckaddr related */
int VRT_VSA_GetPtr(const struct suckaddr *sua, const unsigned char ** dst);
/* VMOD/Modules related */
int VRT_Vmod_Init(void **hdl, void *ptr, int len, const char *nm,
- const char *path, const char *file_id, struct cli *cli);
+ const char *path, const char *file_id, const struct vrt_ctx *ctx);
void VRT_Vmod_Fini(void **hdl);
struct vmod_priv;
diff --git a/lib/libvcc/generate.py b/lib/libvcc/generate.py
index ac62cfc..962f89c 100755
--- a/lib/libvcc/generate.py
+++ b/lib/libvcc/generate.py
@@ -929,8 +929,8 @@ struct ws;
struct cli;
struct worker;
-typedef int vcl_init_f(struct cli *);
-typedef void vcl_fini_f(struct cli *);
+typedef int vcl_init_f(const struct vrt_ctx *ctx);
+typedef void vcl_fini_f(const struct vrt_ctx *ctx);
typedef int vcl_func_f(const struct vrt_ctx *ctx);
""")
diff --git a/lib/libvcc/vcc_backend.c b/lib/libvcc/vcc_backend.c
index 7c079a9..b9114f6 100644
--- a/lib/libvcc/vcc_backend.c
+++ b/lib/libvcc/vcc_backend.c
@@ -423,9 +423,9 @@ vcc_ParseHostDef(struct vcc *tl, const struct token *t_be)
ifp = New_IniFin(tl);
VSB_printf(ifp->ini,
- "\tVRT_init_dir(cli, VCL_conf.director,\n"
+ "\tVRT_init_dir(ctx, VCL_conf.director,\n"
"\t VGC_backend_%s, &vgc_dir_priv_%s);", vgcname, vgcname);
- VSB_printf(ifp->fin, "\tVRT_fini_dir(cli, VGCDIR(%s));", vgcname);
+ VSB_printf(ifp->fin, "\tVRT_fini_dir(ctx, VGCDIR(%s));", vgcname);
tl->ndirector++;
}
diff --git a/lib/libvcc/vcc_compile.c b/lib/libvcc/vcc_compile.c
index 934943d..9085e2c 100644
--- a/lib/libvcc/vcc_compile.c
+++ b/lib/libvcc/vcc_compile.c
@@ -302,7 +302,7 @@ EmitInitFunc(const struct vcc *tl)
{
struct inifin *p;
- Fc(tl, 0, "\nstatic int\nVGC_Init(struct cli *cli)\n{\n\n");
+ Fc(tl, 0, "\nstatic int\nVGC_Init(const struct vrt_ctx *ctx)\n{\n\n");
VTAILQ_FOREACH(p, &tl->inifin, list) {
AZ(VSB_finish(p->ini));
if (VSB_len(p->ini))
@@ -319,7 +319,7 @@ EmitFiniFunc(const struct vcc *tl)
{
struct inifin *p;
- Fc(tl, 0, "\nstatic void\nVGC_Fini(struct cli *cli)\n{\n\n");
+ Fc(tl, 0, "\nstatic void\nVGC_Fini(const struct vrt_ctx *ctx)\n{\n\n");
VTAILQ_FOREACH_REVERSE(p, &tl->inifin, inifinhead, list) {
AZ(VSB_finish(p->fin));
diff --git a/lib/libvcc/vcc_vmod.c b/lib/libvcc/vcc_vmod.c
index 7644621..9564ca9 100644
--- a/lib/libvcc/vcc_vmod.c
+++ b/lib/libvcc/vcc_vmod.c
@@ -177,7 +177,7 @@ vcc_ParseImport(struct vcc *tl)
AN(vmd);
AN(vmd->file_id);
VSB_printf(ifp->ini, "\t \"%s\",\n", vmd->file_id);
- VSB_printf(ifp->ini, "\t cli))\n");
+ VSB_printf(ifp->ini, "\t ctx))\n");
VSB_printf(ifp->ini, "\t\treturn(1);");
/* XXX: zero the function pointer structure ?*/
More information about the varnish-commit
mailing list