[master] b3e1e10 Replace the remaining instances of the the "req" argument in VCL/VRT/VMOD with vrt_ctx arguments.

Poul-Henning Kamp phk at varnish-cache.org
Wed May 1 10:07:05 CEST 2013


commit b3e1e1003fba0bcd7d8534290e940e37963bdb45
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed May 1 08:06:28 2013 +0000

    Replace the remaining instances of the the "req" argument in VCL/VRT/VMOD
    with vrt_ctx arguments.

diff --git a/bin/varnishd/cache/cache_vcl.c b/bin/varnishd/cache/cache_vcl.c
index aa2aec7..3875326 100644
--- a/bin/varnishd/cache/cache_vcl.c
+++ b/bin/varnishd/cache/cache_vcl.c
@@ -220,7 +220,7 @@ VCL_Load(const char *fn, const char *name, struct cli *cli)
 	REPLACE(vcl->name, name);
 	VCLI_Out(cli, "Loaded \"%s\" as \"%s\"", fn , name);
 	VTAILQ_INSERT_TAIL(&vcl_head, vcl, list);
-	(void)vcl->conf->init_func(&ctx, NULL, NULL);
+	(void)vcl->conf->init_func(&ctx, NULL);
 	Lck_Lock(&vcl_mtx);
 	if (vcl_active == NULL)
 		vcl_active = vcl;
@@ -247,7 +247,7 @@ VCL_Nuke(struct vcls *vcl)
 	assert(vcl->conf->discard);
 	assert(vcl->conf->busy == 0);
 	VTAILQ_REMOVE(&vcl_head, vcl, list);
-	(void)vcl->conf->fini_func(&ctx, NULL, NULL);
+	(void)vcl->conf->fini_func(&ctx, NULL);
 	vcl->conf->fini_vcl(NULL);
 	free(vcl->name);
 	(void)dlclose(vcl->dlh);
@@ -421,7 +421,7 @@ vcl_call_method(struct worker *wrk, struct req *req, struct busyobj *bo,
 	wrk->cur_method = method;
 	AN(vsl);
 	VSLb(vsl, SLT_VCL_call, "%s", VCL_Method_Name(method));
-	(void)func(&ctx, wrk, req);
+	(void)func(&ctx, wrk);
 	VSLb(vsl, SLT_VCL_return, "%s", VCL_Return_Name(wrk->handling));
 	wrk->cur_method = 0;
 	WS_Reset(wrk->aws, aws);
diff --git a/bin/varnishd/cache/cache_vrt.c b/bin/varnishd/cache/cache_vrt.c
index 0d9af43..4c44959 100644
--- a/bin/varnishd/cache/cache_vrt.c
+++ b/bin/varnishd/cache/cache_vrt.c
@@ -55,12 +55,14 @@ const void * const vrt_magic_string_unset = &vrt_magic_string_unset;
 /*--------------------------------------------------------------------*/
 
 const struct gethdr_s *
-VRT_MkGethdr(struct req *req, enum gethdr_e where, const char *what)
+VRT_MkGethdr(const struct vrt_ctx *ctx, enum gethdr_e where, const char *what)
 {
 	struct gethdr_s *retval;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	retval = (void*)WS_Alloc(req->wrk->aws, sizeof *retval);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
+	// XXX ?
+	retval = (void*)WS_Alloc(ctx->req->wrk->aws, sizeof *retval);
 	AN(retval);
 	retval->where = where;
 	retval->what = what;
@@ -71,16 +73,18 @@ VRT_MkGethdr(struct req *req, enum gethdr_e where, const char *what)
 /*--------------------------------------------------------------------*/
 
 void
-VRT_error(struct req *req, unsigned code, const char *reason)
+VRT_error(const struct vrt_ctx *ctx, unsigned code, const char *reason)
 {
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	VSLb(req->vsl, SLT_Debug, "VCL_error(%u, %s)", code,
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
+	VSLb(ctx->vsl, SLT_Debug, "VCL_error(%u, %s)", code,
 	    reason ?  reason : "(null)");
 	if (code < 100 || code > 999)
 		code = 503;
-	req->err_code = (uint16_t)code;
-	req->err_reason = reason ? reason : http_StatusMessage(req->err_code);
+	ctx->req->err_code = (uint16_t)code;
+	ctx->req->err_reason =
+	    reason ? reason : http_StatusMessage(ctx->req->err_code);
 }
 
 /*--------------------------------------------------------------------*/
@@ -277,18 +281,20 @@ VRT_handling(struct worker *wrk, unsigned hand)
  */
 
 void
-VRT_hashdata(struct req *req, const char *str, ...)
+VRT_hashdata(const struct vrt_ctx *ctx, const char *str, ...)
 {
 	va_list ap;
 	const char *p;
 
-	HSH_AddString(req, str);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
+	HSH_AddString(ctx->req, str);
 	va_start(ap, str);
 	while (1) {
 		p = va_arg(ap, const char *);
 		if (p == vrt_magic_string_end)
 			break;
-		HSH_AddString(req, p);
+		HSH_AddString(ctx->req, p);
 	}
 }
 
@@ -405,27 +411,29 @@ VRT_l_beresp_saintmode(const struct vrt_ctx *ctx, double a)
 /*--------------------------------------------------------------------*/
 
 void
-VRT_Rollback(struct req *req)
+VRT_Rollback(const struct vrt_ctx *ctx)
 {
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	HTTP_Copy(req->http, req->http0);
-	WS_Reset(req->ws, req->ws_req);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
+	HTTP_Copy(ctx->req->http, ctx->req->http0);
+	WS_Reset(ctx->req->ws, ctx->req->ws_req);
 }
 
 /*--------------------------------------------------------------------*/
 
 void
-VRT_synth_page(const struct req *req, unsigned flags, const char *str, ...)
+VRT_synth_page(const struct vrt_ctx *ctx, unsigned flags, const char *str, ...)
 {
 	va_list ap;
 	const char *p;
 	struct vsb *vsb;
 
 	(void)flags;
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
-	vsb = SMS_Makesynth(req->obj);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx->req->obj, OBJECT_MAGIC);
+	vsb = SMS_Makesynth(ctx->req->obj);
 	AN(vsb);
 
 	VSB_cat(vsb, str);
@@ -438,9 +446,10 @@ VRT_synth_page(const struct req *req, unsigned flags, const char *str, ...)
 		p = va_arg(ap, const char *);
 	}
 	va_end(ap);
-	SMS_Finish(req->obj);
-	http_Unset(req->obj->http, H_Content_Length);
-	http_PrintfHeader(req->obj->http, "Content-Length: %zd", req->obj->len);
+	SMS_Finish(ctx->req->obj);
+	http_Unset(ctx->req->obj->http, H_Content_Length);
+	http_PrintfHeader(ctx->req->obj->http,
+	    "Content-Length: %zd", ctx->req->obj->len);
 }
 
 /*--------------------------------------------------------------------*/
@@ -494,9 +503,12 @@ VRT_ban_string(const char *str)
  */
 
 int
-VRT_CacheReqBody(struct req *req, long long maxsize)
+VRT_CacheReqBody(const struct vrt_ctx *ctx, long long maxsize)
 {
-	return (HTTP1_CacheReqBody(req, maxsize));
+
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
+	return (HTTP1_CacheReqBody(ctx->req, maxsize));
 }
 
 /*--------------------------------------------------------------------
@@ -504,15 +516,19 @@ VRT_CacheReqBody(struct req *req, long long maxsize)
  */
 
 void
-VRT_purge(const struct worker *wrk, struct req *req, double ttl, double grace)
+VRT_purge(const struct worker *wrk, const struct vrt_ctx *ctx, double ttl,
+    double grace)
 {
 
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
 	if (wrk->cur_method == VCL_MET_LOOKUP)
-		HSH_Purge(req, req->obj->objcore->objhead, ttl, grace);
+		HSH_Purge(ctx->req, ctx->req->obj->objcore->objhead,
+		    ttl, grace);
 	else if (wrk->cur_method == VCL_MET_MISS)
-		HSH_Purge(req, req->objcore->objhead, ttl, grace);
+		HSH_Purge(ctx->req, ctx->req->objcore->objhead,
+		    ttl, grace);
 }
 
 /*--------------------------------------------------------------------
diff --git a/bin/varnishd/cache/cache_vrt_re.c b/bin/varnishd/cache/cache_vrt_re.c
index e4b9750..856a057 100644
--- a/bin/varnishd/cache/cache_vrt_re.c
+++ b/bin/varnishd/cache/cache_vrt_re.c
@@ -62,12 +62,12 @@ VRT_re_fini(void *rep)
 }
 
 int
-VRT_re_match(struct req *req, const char *s, void *re)
+VRT_re_match(const struct vrt_ctx *ctx, const char *s, void *re)
 {
 	vre_t *t;
 	int i;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	if (s == NULL)
 		s = "";
 	AN(re);
@@ -76,12 +76,12 @@ VRT_re_match(struct req *req, const char *s, void *re)
 	if (i >= 0)
 		return (1);
 	if (i < VRE_ERROR_NOMATCH )
-		VSLb(req->vsl, SLT_VCL_Error, "Regexp matching returned %d", i);
+		VSLb(ctx->vsl, SLT_VCL_Error, "Regexp matching returned %d", i);
 	return (0);
 }
 
 const char *
-VRT_regsub(struct req *req, int all, const char *str, void *re,
+VRT_regsub(const struct vrt_ctx *ctx, int all, const char *str, void *re,
     const char *sub)
 {
 	int ovector[30];
@@ -94,7 +94,7 @@ VRT_regsub(struct req *req, int all, const char *str, void *re,
 	int options = 0;
 	size_t len;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	AN(re);
 	if (str == NULL)
 		str = "";
@@ -110,12 +110,12 @@ VRT_regsub(struct req *req, int all, const char *str, void *re,
 	if (i == VRE_ERROR_NOMATCH)
 		return(str);
 	if (i < VRE_ERROR_NOMATCH ) {
-		VSLb(req->vsl, SLT_VCL_Error, "Regexp matching returned %d", i);
+		VSLb(ctx->vsl, SLT_VCL_Error, "Regexp matching returned %d", i);
 		return(str);
 	}
 
-	u = WS_Reserve(req->http->ws, 0);
-	res.e = res.b = b0 = req->http->ws->f;
+	u = WS_Reserve(ctx->ws, 0);
+	res.e = res.b = b0 = ctx->ws->f;
 	res.e += u;
 
 	do {
@@ -147,8 +147,8 @@ VRT_regsub(struct req *req, int all, const char *str, void *re,
 		i = VRE_exec(t, str, len, 0, options, ovector, 30,
 		    &cache_param->vre_limits);
 		if (i < VRE_ERROR_NOMATCH ) {
-			WS_Release(req->http->ws, 0);
-			VSLb(req->vsl, SLT_VCL_Error,
+			WS_Release(ctx->ws, 0);
+			VSLb(ctx->vsl, SLT_VCL_Error,
 			    "Regexp matching returned %d", i);
 			return(str);
 		}
@@ -157,10 +157,10 @@ VRT_regsub(struct req *req, int all, const char *str, void *re,
 	/* Copy suffix to match */
 	Tadd(&res, str, len+1);
 	if (res.b >= res.e) {
-		WS_Release(req->http->ws, 0);
+		WS_Release(ctx->ws, 0);
 		return (str);
 	}
 	Tcheck(res);
-	WS_ReleaseP(req->http->ws, res.b);
+	WS_ReleaseP(ctx->ws, res.b);
 	return (b0);
 }
diff --git a/bin/varnishtest/tests/c00033.vtc b/bin/varnishtest/tests/c00033.vtc
index f78b582..809387d 100644
--- a/bin/varnishtest/tests/c00033.vtc
+++ b/bin/varnishtest/tests/c00033.vtc
@@ -25,13 +25,13 @@ varnish v1 -vcl+backend {
 
 	sub vcl_lookup {
 		if (req.method == "PURGE") {
-			C{ VRT_purge(wrk, req, 0, 0); }C
+			C{ VRT_purge(wrk, ctx, 0, 0); }C
 			error 456 "got it";
 		}
 	}
 	sub vcl_miss {
 		if (req.method == "PURGE") {
-			C{ VRT_purge(wrk, req, 0, 0); }C
+			C{ VRT_purge(wrk, ctx, 0, 0); }C
 			error 456 "got it";
 		}
 	}
diff --git a/bin/varnishtest/tests/c00055.vtc b/bin/varnishtest/tests/c00055.vtc
index b7c93a4..5bc57f2 100644
--- a/bin/varnishtest/tests/c00055.vtc
+++ b/bin/varnishtest/tests/c00055.vtc
@@ -12,7 +12,7 @@ server s1 {
 
 varnish v1 -vcl+backend {
 	sub vcl_recv {
-		C{ VRT_CacheReqBody(req, 1000); }C
+		C{ VRT_CacheReqBody(ctx, 1000); }C
 		return (pass);
 	}
 	sub vcl_backend_response {
diff --git a/include/vrt.h b/include/vrt.h
index 031a9e1..063cf9a 100644
--- a/include/vrt.h
+++ b/include/vrt.h
@@ -186,38 +186,40 @@ void VRT_acl_log(const struct vrt_ctx *, const char *msg);
 
 /* req related */
 
-int VRT_CacheReqBody(struct req *, long long maxsize);
+int VRT_CacheReqBody(const struct vrt_ctx *, long long maxsize);
 
 /* Regexp related */
 void VRT_re_init(void **, const char *);
 void VRT_re_fini(void *);
-int VRT_re_match(struct req *, const char *, void *re);
-const char *VRT_regsub(struct req *, int all, const char *,
+int VRT_re_match(const struct vrt_ctx *, const char *, void *re);
+const char *VRT_regsub(const struct vrt_ctx *, int all, const char *,
     void *, const char *);
 
 void VRT_ban_string(const char *);
-void VRT_purge(const struct worker *, struct req *, double ttl, double grace);
+void VRT_purge(const struct worker *, const struct vrt_ctx *, double ttl,
+    double grace);
 
 void VRT_count(const struct vrt_ctx *, unsigned);
 int VRT_rewrite(const char *, const char *);
-void VRT_error(struct req *, unsigned, const char *);
+void VRT_error(const struct vrt_ctx *, unsigned, const char *);
 int VRT_switch_config(const char *);
 
-const struct gethdr_s *VRT_MkGethdr(struct req *,enum gethdr_e, const char *);
+const struct gethdr_s *VRT_MkGethdr(const struct vrt_ctx *,enum gethdr_e,
+    const char *);
 char *VRT_GetHdr(const struct vrt_ctx *, const struct gethdr_s *);
 void VRT_SetHdr(const struct vrt_ctx *, const struct gethdr_s *, const char *, ...);
 void VRT_handling(struct worker *, unsigned hand);
 
-void VRT_hashdata(struct req *, const char *str, ...);
+void VRT_hashdata(const struct vrt_ctx *, const char *str, ...);
 
 /* Simple stuff */
 int VRT_strcmp(const char *s1, const char *s2);
 void VRT_memmove(void *dst, const void *src, unsigned len);
 
-void VRT_Rollback(struct req *);
+void VRT_Rollback(const struct vrt_ctx *);
 
 /* Synthetic pages */
-void VRT_synth_page(const struct req *, unsigned flags, const char *, ...);
+void VRT_synth_page(const struct vrt_ctx *, unsigned flags, const char *, ...);
 
 /* Backend related */
 void VRT_init_dir(struct cli *, struct director **, const char *name,
diff --git a/lib/libvcl/generate.py b/lib/libvcl/generate.py
index 254a3cc..509141f 100755
--- a/lib/libvcl/generate.py
+++ b/lib/libvcl/generate.py
@@ -698,7 +698,6 @@ fo = open(buildroot + "/include/vcl.h", "w")
 file_header(fo)
 
 fo.write("""
-struct sess;
 struct vrt_ctx;
 struct req;
 struct busyobj;
@@ -708,7 +707,7 @@ struct worker;
 
 typedef int vcl_init_f(struct cli *);
 typedef void vcl_fini_f(struct cli *);
-typedef int vcl_func_f(const struct vrt_ctx *ctx, struct worker *, struct req *);
+typedef int vcl_func_f(const struct vrt_ctx *ctx, struct worker *);
 """)
 
 
diff --git a/lib/libvcl/vcc_action.c b/lib/libvcl/vcc_action.c
index 217aee4..a5bd769 100644
--- a/lib/libvcl/vcc_action.c
+++ b/lib/libvcl/vcc_action.c
@@ -46,7 +46,7 @@ parse_call(struct vcc *tl)
 	ExpectErr(tl, ID);
 	vcc_AddCall(tl, tl->t);
 	vcc_AddRef(tl, tl->t, SYM_SUB);
-	Fb(tl, 1, "if (VGC_function_%.*s(ctx, req))\n", PF(tl->t));
+	Fb(tl, 1, "if (VGC_function_%.*s(ctx))\n", PF(tl->t));
 	Fb(tl, 1, "\treturn (1);\n");
 	vcc_NextToken(tl);
 	return;
@@ -59,7 +59,7 @@ parse_error(struct vcc *tl)
 {
 
 	vcc_NextToken(tl);
-	Fb(tl, 1, "VRT_error(req,\n");
+	Fb(tl, 1, "VRT_error(ctx,\n");
 	if (tl->t->tok == '(') {
 		vcc_NextToken(tl);
 		vcc_Expr(tl, INT);
@@ -223,7 +223,7 @@ parse_new(struct vcc *tl)
 
 	bprintf(buf1, ", &%s, \"%s\"", sy1->name, sy1->name);
 	vcc_Eval_Func(tl, s_init, buf1, "ASDF", s_init + strlen(s_init) + 1);
-	Fd(tl, 0, "\t%s((struct req*)0, &%s);\n", s_fini, sy1->name);
+	Fd(tl, 0, "\t%s(&%s);\n", s_fini, sy1->name);
 	ExpectErr(tl, ';');
 
 	bprintf(buf1, ", %s", sy1->name);
@@ -292,7 +292,7 @@ parse_hash_data(struct vcc *tl)
 	vcc_NextToken(tl);
 	SkipToken(tl, '(');
 
-	Fb(tl, 1, "VRT_hashdata(req, ");
+	Fb(tl, 1, "VRT_hashdata(ctx, ");
 	vcc_Expr(tl, STRING_LIST);
 	ERRCHK(tl);
 	Fb(tl, 0, ");\n");
@@ -339,7 +339,7 @@ parse_rollback(struct vcc *tl)
 {
 
 	vcc_NextToken(tl);
-	Fb(tl, 1, "VRT_Rollback(req);\n");
+	Fb(tl, 1, "VRT_Rollback(ctx);\n");
 }
 
 /*--------------------------------------------------------------------*/
@@ -349,7 +349,7 @@ parse_purge(struct vcc *tl)
 {
 
 	vcc_NextToken(tl);
-	Fb(tl, 1, "VRT_purge(wrk, req, 0, 0);\n");
+	Fb(tl, 1, "VRT_purge(wrk, ctx, 0, 0);\n");
 }
 
 /*--------------------------------------------------------------------*/
@@ -359,7 +359,7 @@ parse_synthetic(struct vcc *tl)
 {
 	vcc_NextToken(tl);
 
-	Fb(tl, 1, "VRT_synth_page(req, 0, ");
+	Fb(tl, 1, "VRT_synth_page(ctx, 0, ");
 	vcc_Expr(tl, STRING_LIST);
 	ERRCHK(tl);
 	Fb(tl, 0, ");\n");
diff --git a/lib/libvcl/vcc_compile.c b/lib/libvcl/vcc_compile.c
index bf992e2..a3de471 100644
--- a/lib/libvcl/vcc_compile.c
+++ b/lib/libvcl/vcc_compile.c
@@ -694,8 +694,7 @@ vcc_CompileSource(const struct vcc *tl0, struct vsb *sb, struct source *sp)
 		Fc(tl, 1, "\nstatic int __match_proto__(vcl_func_f)\n");
 		Fc(tl, 1,
 		    "VGC_function_%s(const struct vrt_ctx *ctx,"
-		    " struct worker *wrk,"
-		    " struct req *req)\n",
+		    " struct worker *wrk)\n",
 		    method_tab[i].name);
 		AZ(VSB_finish(tl->fm[i]));
 		Fc(tl, 1, "{\n");
diff --git a/lib/libvcl/vcc_expr.c b/lib/libvcl/vcc_expr.c
index c318920..88d7ccb 100644
--- a/lib/libvcl/vcc_expr.c
+++ b/lib/libvcl/vcc_expr.c
@@ -459,7 +459,7 @@ vcc_Eval_Regsub(struct vcc *tl, struct expr **e, const struct symbol *sym)
 	p = vcc_regexp(tl);
 	vcc_NextToken(tl);
 
-	bprintf(buf, "VRT_regsub(req, %d,\v+\n\v1,\n%s", all, p);
+	bprintf(buf, "VRT_regsub(ctx, %d,\v+\n\v1,\n%s", all, p);
 	*e = vcc_expr_edit(STRING, buf, e2, *e);
 
 	SkipToken(tl, ',');
@@ -535,7 +535,7 @@ vcc_func(struct vcc *tl, struct expr **e, const char *cfunc,
 	p = args;
 	if (extra == NULL)
 		extra = "";
-	e2 = vcc_mk_expr(vcc_arg_type(&p), "%s(req%s\v+", cfunc, extra);
+	e2 = vcc_mk_expr(vcc_arg_type(&p), "%s(ctx%s\v+", cfunc, extra);
 	while (*p != '\0') {
 		e1 = NULL;
 		fmt = vcc_arg_type(&p);
@@ -1002,7 +1002,7 @@ vcc_expr_cmp(struct vcc *tl, struct expr **e, enum var_type fmt)
 		re = vcc_regexp(tl);
 		ERRCHK(tl);
 		vcc_NextToken(tl);
-		bprintf(buf, "%sVRT_re_match(req, \v1, %s)", not, re);
+		bprintf(buf, "%sVRT_re_match(ctx, \v1, %s)", not, re);
 		*e = vcc_expr_edit(BOOL, buf, *e, NULL);
 		return;
 	}
diff --git a/lib/libvcl/vcc_parse.c b/lib/libvcl/vcc_parse.c
index 75e976f..ff70d64 100644
--- a/lib/libvcl/vcc_parse.c
+++ b/lib/libvcl/vcc_parse.c
@@ -237,10 +237,10 @@ vcc_Function(struct vcc *tl)
 		}
 		tl->curproc = vcc_AddProc(tl, tl->t);
 		Fh(tl, 0, "static int VGC_function_%.*s "
-		    "(struct vrt_ctx *ctx, struct req *);\n", PF(tl->t));
+		    "(struct vrt_ctx *ctx);\n", PF(tl->t));
 		Fc(tl, 1, "\nstatic int __match_proto__(vcl_func_t)\n");
-		Fc(tl, 1, "VGC_function_%.*s(struct vrt_ctx *ctx, "
-		    "struct req *req)\n", PF(tl->t));
+		Fc(tl, 1, "VGC_function_%.*s(struct vrt_ctx *ctx)\n",
+		    PF(tl->t));
 	}
 	vcc_NextToken(tl);
 	tl->indent += INDENT;
diff --git a/lib/libvcl/vmodtool.py b/lib/libvcl/vmodtool.py
index ddec683..259f97f 100755
--- a/lib/libvcl/vmodtool.py
+++ b/lib/libvcl/vmodtool.py
@@ -246,27 +246,37 @@ class func(object):
 	def set_pfx(self, s):
 		self.pfx = s
 
-	def c_proto(self, fo):
+	def c_proto(self, fo, fini=False):
 		fo.write(ctypes[self.retval])
-		fo.write(" vmod_" + self.cnam)
-		fo.write("(struct req *")
+		fo.write(" vmod_" + self.cnam + "(")
+		p = ""
+		if not fini:
+			fo.write("const struct vrt_ctx *")
+			p = ", "
 		if self.pfx != None:
-			fo.write(self.pfx)
+			fo.write(p + self.pfx)
+			p = ", "
 		for a in self.al:
-			fo.write(", " + ctypes[a.typ])
+			fo.write(p + ctypes[a.typ])
+			p = ", "
 			if a.nam != None:
 				fo.write(" " + a.nam)
 		fo.write(");\n")
 
-	def c_typedef(self, modname):
+	def c_typedef(self, modname, fini=False):
 		s = "typedef "
 		s += ctypes[self.retval]
-		s += " td_" + modname + "_" + self.cnam
-		s += "(struct req *"
+		s += " td_" + modname + "_" + self.cnam + "("
+		p = ""
+		if not fini:
+			s += "const struct vrt_ctx *"
+			p = ", "
 		if self.pfx != None:
-			s += self.pfx
+			s += p + self.pfx
+			p = ", "
 		for a in self.al:
-			s += ", " + ctypes[a.typ]
+			s += p + ctypes[a.typ]
+			p = ", "
 		s += ");"
 		return s
 
@@ -300,10 +310,10 @@ class obj(object):
 
 	def set_modnam(self, modnam):
 		self.st = "struct vmod_" + modnam + "_" + self.nam
-		self.init.set_pfx(", " + self.st + " **, const char *")
-		self.fini.set_pfx(", " + self.st + " **")
+		self.init.set_pfx(self.st + " **, const char *")
+		self.fini.set_pfx(self.st + " **")
 		for m in self.methods:
-			m.set_pfx(", " + self.st + " *")
+			m.set_pfx(self.st + " *")
 
 	def set_init(self, f):
 		self.init = f
@@ -319,7 +329,7 @@ class obj(object):
 		l.append("/* Object " + self.nam + " */")
 		l.append(self.st + ";")
 		l.append(self.init.c_typedef(modnam) + "")
-		l.append(self.fini.c_typedef(modnam) + "")
+		l.append(self.fini.c_typedef(modnam, fini=True) + "")
 		for m in self.methods:
 			l.append(m.c_typedef(modnam) + "")
 		return l
@@ -327,7 +337,7 @@ class obj(object):
 	def c_proto(self, fo):
 		fo.write(self.st + ";\n")
 		self.init.c_proto(fo)
-		self.fini.c_proto(fo)
+		self.fini.c_proto(fo, fini = True)
 		for m in self.methods:
 			m.c_proto(fo)
 
@@ -520,7 +530,7 @@ fh = open("vcc_if.h", "w")
 file_header(fc)
 file_header(fh)
 
-fh.write('struct req;\n')
+fh.write('struct vrt_ctx;\n')
 fh.write('struct VCL_conf;\n')
 fh.write('struct vmod_priv;\n')
 fh.write("\n");
diff --git a/lib/libvmod_debug/vmod_debug.c b/lib/libvmod_debug/vmod_debug.c
index ee062ac..5583a4f 100644
--- a/lib/libvmod_debug/vmod_debug.c
+++ b/lib/libvmod_debug/vmod_debug.c
@@ -36,23 +36,23 @@
 #include "vcc_if.h"
 
 VCL_VOID __match_proto__(td_debug_panic)
-vmod_panic(struct req *req, const char *str, ...)
+vmod_panic(const struct vrt_ctx *ctx, const char *str, ...)
 {
 	va_list ap;
 	char *b;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	va_start(ap, str);
-	b = VRT_String(req->http->ws, "PANIC: ", str, ap);
+	b = VRT_String(ctx->ws, "PANIC: ", str, ap);
 	va_end(ap);
 	VAS_Fail("VCL", "", 0, b, 0, VAS_VCL);
 }
 
 VCL_STRING __match_proto__(td_debug_author)
-vmod_author(struct req *req, VCL_ENUM id)
+vmod_author(const struct vrt_ctx *ctx, VCL_ENUM id)
 {
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	if (!strcmp(id, "phk"))
 		return ("Poul-Henning");
 	if (!strcmp(id, "des"))
@@ -75,10 +75,10 @@ init_function(struct vmod_priv *priv, const struct VCL_conf *cfg)
 }
 
 VCL_VOID __match_proto__(td_debug_test_priv_call)
-vmod_test_priv_call(struct req *req, struct vmod_priv *priv)
+vmod_test_priv_call(const struct vrt_ctx *ctx, struct vmod_priv *priv)
 {
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	if (priv->priv == NULL) {
 		priv->priv = strdup("BAR");
 		priv->free = free;
@@ -88,9 +88,9 @@ vmod_test_priv_call(struct req *req, struct vmod_priv *priv)
 }
 
 VCL_VOID __match_proto__(td_debug_test_priv_vcl)
-vmod_test_priv_vcl(struct req *req, struct vmod_priv *priv)
+vmod_test_priv_vcl(const struct vrt_ctx *ctx, struct vmod_priv *priv)
 {
 
-        CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
         assert(!strcmp(priv->priv, "FOO"));
 }
diff --git a/lib/libvmod_debug/vmod_debug_obj.c b/lib/libvmod_debug/vmod_debug_obj.c
index 2b628fa..c27b6db 100644
--- a/lib/libvmod_debug/vmod_debug_obj.c
+++ b/lib/libvmod_debug/vmod_debug_obj.c
@@ -42,12 +42,12 @@ struct vmod_debug_obj {
 };
 
 VCL_VOID
-vmod_obj__init(struct req *req, struct vmod_debug_obj **op,
+vmod_obj__init(const struct vrt_ctx *ctx, struct vmod_debug_obj **op,
     const char *vcl_name, VCL_STRING s)
 {
 	struct vmod_debug_obj *o;
 
-	(void)req;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	(void)vcl_name;
 	(void)s;
 	AN(op);
@@ -60,10 +60,9 @@ vmod_obj__init(struct req *req, struct vmod_debug_obj **op,
 }
 
 VCL_VOID
-vmod_obj__fini(struct req *req, struct vmod_debug_obj **op)
+vmod_obj__fini(struct vmod_debug_obj **op)
 {
 
-	(void)req;
 	AN(op);
 	AN(*op);
 	FREE_OBJ(*op);
@@ -71,9 +70,10 @@ vmod_obj__fini(struct req *req, struct vmod_debug_obj **op)
 }
 
 VCL_STRING __match_proto__()
-vmod_obj_foo(struct req *req, struct vmod_debug_obj *o, VCL_STRING s)
+vmod_obj_foo(const struct vrt_ctx *ctx, struct vmod_debug_obj *o, VCL_STRING s)
 {
-	(void)req;
+
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	(void)s;
 	CHECK_OBJ_NOTNULL(o, VMOD_DEBUG_OBJ_MAGIC);
 	assert(o->foobar == 42);
@@ -81,9 +81,10 @@ vmod_obj_foo(struct req *req, struct vmod_debug_obj *o, VCL_STRING s)
 }
 
 VCL_TIME __match_proto__()
-vmod_obj_date(struct req *req, struct vmod_debug_obj *o)
+vmod_obj_date(const struct vrt_ctx *ctx, struct vmod_debug_obj *o)
 {
-	(void)req;
+
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(o, VMOD_DEBUG_OBJ_MAGIC);
 	assert(o->foobar == 42);
 	return (21.4);
diff --git a/lib/libvmod_directors/fall_back.c b/lib/libvmod_directors/fall_back.c
index 7907700..7c430ac 100644
--- a/lib/libvmod_directors/fall_back.c
+++ b/lib/libvmod_directors/fall_back.c
@@ -75,12 +75,12 @@ vmod_rr_getfd(const struct director *dir, struct busyobj *bo)
 }
 
 VCL_VOID __match_proto__()
-vmod_fallback__init(struct req *req, struct vmod_directors_fallback **rrp,
-    const char *vcl_name)
+vmod_fallback__init(const struct vrt_ctx *ctx,
+    struct vmod_directors_fallback **rrp, const char *vcl_name)
 {
 	struct vmod_directors_fallback *rr;
 
-	AZ(req);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	AN(rrp);
 	AZ(*rrp);
 	ALLOC_OBJ(rr, VMOD_DIRECTORS_FALLBACK_MAGIC);
@@ -90,11 +90,10 @@ vmod_fallback__init(struct req *req, struct vmod_directors_fallback **rrp,
 }
 
 VCL_VOID __match_proto__()
-vmod_fallback__fini(struct req *req, struct vmod_directors_fallback **rrp)
+vmod_fallback__fini(struct vmod_directors_fallback **rrp)
 {
 	struct vmod_directors_fallback *rr;
 
-	AZ(req);
 	rr = *rrp;
 	*rrp = NULL;
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_FALLBACK_MAGIC);
@@ -103,19 +102,20 @@ vmod_fallback__fini(struct req *req, struct vmod_directors_fallback **rrp)
 }
 
 VCL_VOID __match_proto__()
-vmod_fallback_add_backend(struct req *req,
+vmod_fallback_add_backend(const struct vrt_ctx *ctx,
     struct vmod_directors_fallback *rr, VCL_BACKEND be)
 {
 
-	(void)req;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_FALLBACK_MAGIC);
 	(void)vdir_add_backend(rr->vd, be, 0.0);
 }
 
 VCL_BACKEND __match_proto__()
-vmod_fallback_backend(struct req *req, struct vmod_directors_fallback *rr)
+vmod_fallback_backend(const struct vrt_ctx *ctx,
+    struct vmod_directors_fallback *rr)
 {
-	(void)req;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_FALLBACK_MAGIC);
 	return (rr->vd->dir);
 }
diff --git a/lib/libvmod_directors/hash.c b/lib/libvmod_directors/hash.c
index ac9bd41..43b4872 100644
--- a/lib/libvmod_directors/hash.c
+++ b/lib/libvmod_directors/hash.c
@@ -52,12 +52,12 @@ struct vmod_directors_hash {
 };
 
 VCL_VOID __match_proto__()
-vmod_hash__init(struct req *req, struct vmod_directors_hash **rrp,
+vmod_hash__init(const struct vrt_ctx *ctx, struct vmod_directors_hash **rrp,
     const char *vcl_name)
 {
 	struct vmod_directors_hash *rr;
 
-	AZ(req);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	AN(rrp);
 	AZ(*rrp);
 	ALLOC_OBJ(rr, VMOD_DIRECTORS_HASH_MAGIC);
@@ -70,11 +70,10 @@ vmod_hash__init(struct req *req, struct vmod_directors_hash **rrp,
 }
 
 VCL_VOID __match_proto__()
-vmod_hash__fini(struct req *req, struct vmod_directors_hash **rrp)
+vmod_hash__fini(struct vmod_directors_hash **rrp)
 {
 	struct vmod_directors_hash *rr;
 
-	AZ(req);
 	rr = *rrp;
 	*rrp = NULL;
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_HASH_MAGIC);
@@ -84,40 +83,41 @@ vmod_hash__fini(struct req *req, struct vmod_directors_hash **rrp)
 }
 
 VCL_VOID __match_proto__()
-vmod_hash_add_backend(struct req *req,
+vmod_hash_add_backend(const struct vrt_ctx *ctx,
     struct vmod_directors_hash *rr, VCL_BACKEND be, double w)
 {
 
-	(void)req;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_HASH_MAGIC);
 	(void)vdir_add_backend(rr->vd, be, w);
 }
 
 VCL_BACKEND __match_proto__()
-vmod_hash_backend(struct req *req, struct vmod_directors_hash *rr, const char *arg, ...)
+vmod_hash_backend(const struct vrt_ctx *ctx, struct vmod_directors_hash *rr,
+    const char *arg, ...)
 {
-	struct SHA256Context ctx;
+	struct SHA256Context sha_ctx;
 	va_list ap;
 	const char *p;
 	unsigned char sha256[SHA256_LEN];
 	VCL_BACKEND be;
 	double r;
 
-	(void)req;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_HASH_MAGIC);
-	SHA256_Init(&ctx);
+	SHA256_Init(&sha_ctx);
 	va_start(ap, arg);
 	p = arg;
 	while (p != vrt_magic_string_end) {
-		SHA256_Update(&ctx, arg, strlen(arg));
+		SHA256_Update(&sha_ctx, arg, strlen(arg));
 		p = va_arg(ap, const char *);
 	}
 	va_end(ap);
-	SHA256_Final(sha256, &ctx);
+	SHA256_Final(sha256, &sha_ctx);
 
 	r = vbe32dec(sha256);
 	r = scalbn(r, -32);
-	be = vdir_pick_be(rr->vd, req->busyobj, r, rr->nloops);
+	be = vdir_pick_be(rr->vd, ctx->bo, r, rr->nloops);
 	return (be);
 }
diff --git a/lib/libvmod_directors/random.c b/lib/libvmod_directors/random.c
index d51c170..a8dd8a7 100644
--- a/lib/libvmod_directors/random.c
+++ b/lib/libvmod_directors/random.c
@@ -74,12 +74,12 @@ vmod_rr_getfd(const struct director *dir, struct busyobj *bo)
 }
 
 VCL_VOID __match_proto__()
-vmod_random__init(struct req *req, struct vmod_directors_random **rrp,
+vmod_random__init(const struct vrt_ctx *ctx, struct vmod_directors_random **rrp,
     const char *vcl_name)
 {
 	struct vmod_directors_random *rr;
 
-	AZ(req);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	AN(rrp);
 	AZ(*rrp);
 	ALLOC_OBJ(rr, VMOD_DIRECTORS_RANDOM_MAGIC);
@@ -92,11 +92,10 @@ vmod_random__init(struct req *req, struct vmod_directors_random **rrp,
 }
 
 VCL_VOID __match_proto__()
-vmod_random__fini(struct req *req, struct vmod_directors_random **rrp)
+vmod_random__fini(struct vmod_directors_random **rrp)
 {
 	struct vmod_directors_random *rr;
 
-	AZ(req);
 	rr = *rrp;
 	*rrp = NULL;
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_RANDOM_MAGIC);
@@ -106,19 +105,19 @@ vmod_random__fini(struct req *req, struct vmod_directors_random **rrp)
 }
 
 VCL_VOID __match_proto__()
-vmod_random_add_backend(struct req *req,
+vmod_random_add_backend(const struct vrt_ctx *ctx,
     struct vmod_directors_random *rr, VCL_BACKEND be, double w)
 {
 
-	(void)req;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_RANDOM_MAGIC);
 	(void)vdir_add_backend(rr->vd, be, w);
 }
 
 VCL_BACKEND __match_proto__()
-vmod_random_backend(struct req *req, struct vmod_directors_random *rr)
+vmod_random_backend(const struct vrt_ctx *ctx, struct vmod_directors_random *rr)
 {
-	(void)req;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_RANDOM_MAGIC);
 	return (rr->vd->dir);
 }
diff --git a/lib/libvmod_directors/round_robin.c b/lib/libvmod_directors/round_robin.c
index fb4ba92..fe0e528 100644
--- a/lib/libvmod_directors/round_robin.c
+++ b/lib/libvmod_directors/round_robin.c
@@ -78,12 +78,12 @@ vmod_rr_getfd(const struct director *dir, struct busyobj *bo)
 }
 
 VCL_VOID __match_proto__()
-vmod_round_robin__init(struct req *req, struct vmod_directors_round_robin **rrp,
-    const char *vcl_name)
+vmod_round_robin__init(const struct vrt_ctx *ctx,
+    struct vmod_directors_round_robin **rrp, const char *vcl_name)
 {
 	struct vmod_directors_round_robin *rr;
 
-	AZ(req);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	AN(rrp);
 	AZ(*rrp);
 	ALLOC_OBJ(rr, VMOD_DIRECTORS_ROUND_ROBIN_MAGIC);
@@ -93,11 +93,10 @@ vmod_round_robin__init(struct req *req, struct vmod_directors_round_robin **rrp,
 }
 
 VCL_VOID __match_proto__()
-vmod_round_robin__fini(struct req *req, struct vmod_directors_round_robin **rrp)
+vmod_round_robin__fini(struct vmod_directors_round_robin **rrp)
 {
 	struct vmod_directors_round_robin *rr;
 
-	AZ(req);
 	rr = *rrp;
 	*rrp = NULL;
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_ROUND_ROBIN_MAGIC);
@@ -106,19 +105,21 @@ vmod_round_robin__fini(struct req *req, struct vmod_directors_round_robin **rrp)
 }
 
 VCL_VOID __match_proto__()
-vmod_round_robin_add_backend(struct req *req,
+vmod_round_robin_add_backend(const struct vrt_ctx *ctx,
     struct vmod_directors_round_robin *rr, VCL_BACKEND be)
 {
 
-	(void)req;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_ROUND_ROBIN_MAGIC);
 	(void)vdir_add_backend(rr->vd, be, 0.0);
 }
 
 VCL_BACKEND __match_proto__()
-vmod_round_robin_backend(struct req *req, struct vmod_directors_round_robin *rr)
+vmod_round_robin_backend(const struct vrt_ctx *ctx,
+    struct vmod_directors_round_robin *rr)
 {
-	(void)req;
+
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_ROUND_ROBIN_MAGIC);
 	return (rr->vd->dir);
 }
diff --git a/lib/libvmod_std/vmod_std.c b/lib/libvmod_std/vmod_std.c
index cbea944..f105135 100644
--- a/lib/libvmod_std/vmod_std.c
+++ b/lib/libvmod_std/vmod_std.c
@@ -46,25 +46,25 @@
 #include "vcc_if.h"
 
 VCL_VOID __match_proto__(td_std_set_ip_tos)
-vmod_set_ip_tos(struct req *req, VCL_INT tos)
+vmod_set_ip_tos(const struct vrt_ctx *ctx, VCL_INT tos)
 {
 	int itos = tos;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	VTCP_Assert(setsockopt(req->sp->fd,
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	VTCP_Assert(setsockopt(ctx->req->sp->fd,
 	    IPPROTO_IP, IP_TOS, &itos, sizeof(itos)));
 }
 
 static const char *
-vmod_updown(struct req *req, int up, const char *s, va_list ap)
+vmod_updown(const struct vrt_ctx *ctx, int up, const char *s, va_list ap)
 {
 	unsigned u;
 	char *b, *e;
 	const char *p;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	u = WS_Reserve(req->ws, 0);
-	e = b = req->ws->f;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	u = WS_Reserve(ctx->ws, 0);
+	e = b = ctx->ws->f;
 	e += u;
 	p = s;
 	while (p != vrt_magic_string_end && b < e) {
@@ -81,48 +81,48 @@ vmod_updown(struct req *req, int up, const char *s, va_list ap)
 		*b = '\0';
 	b++;
 	if (b > e) {
-		WS_Release(req->ws, 0);
+		WS_Release(ctx->ws, 0);
 		return (NULL);
 	} else {
 		e = b;
-		b = req->ws->f;
-		WS_Release(req->ws, e - b);
+		b = ctx->ws->f;
+		WS_Release(ctx->ws, e - b);
 		return (b);
 	}
 }
 
 VCL_STRING __match_proto__(td_std_toupper)
-vmod_toupper(struct req *req, const char *s, ...)
+vmod_toupper(const struct vrt_ctx *ctx, const char *s, ...)
 {
 	const char *p;
 	va_list ap;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	va_start(ap, s);
-	p = vmod_updown(req, 1, s, ap);
+	p = vmod_updown(ctx, 1, s, ap);
 	va_end(ap);
 	return (p);
 }
 
 VCL_STRING __match_proto__(td_std_tolower)
-vmod_tolower(struct req *req, const char *s, ...)
+vmod_tolower(const struct vrt_ctx *ctx, const char *s, ...)
 {
 	const char *p;
 	va_list ap;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	va_start(ap, s);
-	p = vmod_updown(req, 0, s, ap);
+	p = vmod_updown(ctx, 0, s, ap);
 	va_end(ap);
 	return (p);
 }
 
 VCL_REAL __match_proto__(td_std_random)
-vmod_random(struct req *req, VCL_REAL lo, VCL_REAL hi)
+vmod_random(const struct vrt_ctx *ctx, VCL_REAL lo, VCL_REAL hi)
 {
 	double a;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	a = drand48();
 	a *= hi - lo;
 	a += lo;
@@ -130,60 +130,56 @@ vmod_random(struct req *req, VCL_REAL lo, VCL_REAL hi)
 }
 
 VCL_VOID __match_proto__(td_std_log)
-vmod_log(struct req *req, const char *fmt, ...)
+vmod_log(const struct vrt_ctx *ctx, const char *fmt, ...)
 {
 	unsigned u;
 	va_list ap;
 	txt t;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	u = WS_Reserve(req->ws, 0);
-	t.b = req->ws->f;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	u = WS_Reserve(ctx->ws, 0);
+	t.b = ctx->ws->f;
 	va_start(ap, fmt);
 	t.e = VRT_StringList(t.b, u, fmt, ap);
 	va_end(ap);
 	if (t.e != NULL) {
 		assert(t.e > t.b);
 		t.e--;
-		VSLbt(req->vsl, SLT_VCL_Log, t);
+		VSLbt(ctx->vsl, SLT_VCL_Log, t);
 	}
-	WS_Release(req->ws, 0);
+	WS_Release(ctx->ws, 0);
 }
 
 VCL_VOID __match_proto__(td_std_syslog)
-vmod_syslog(struct req *req, VCL_INT fac, const char *fmt, ...)
+vmod_syslog(const struct vrt_ctx *ctx, VCL_INT fac, const char *fmt, ...)
 {
 	char *p;
 	unsigned u;
 	va_list ap;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	u = WS_Reserve(req->ws, 0);
-	p = req->ws->f;
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	u = WS_Reserve(ctx->ws, 0);
+	p = ctx->ws->f;
 	va_start(ap, fmt);
 	p = VRT_StringList(p, u, fmt, ap);
 	va_end(ap);
 	if (p != NULL)
 		syslog((int)fac, "%s", p);
-	WS_Release(req->ws, 0);
+	WS_Release(ctx->ws, 0);
 }
 
 VCL_VOID __match_proto__(td_std_collect)
-vmod_collect(struct req *req, const struct gethdr_s *hdr)
+vmod_collect(const struct vrt_ctx *ctx, const struct gethdr_s *hdr)
 {
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	if (hdr->where == HDR_REQ)
-		http_CollectHdr(req->http, hdr->what);
+		http_CollectHdr(ctx->http_req, hdr->what);
 	else if (hdr->where == HDR_BEREQ) {
-		AN(req->busyobj);
-		http_CollectHdr(req->busyobj->bereq, hdr->what);
-	}
-	else if (hdr->where == HDR_BERESP) {
-		AN(req->busyobj);
-		http_CollectHdr(req->busyobj->beresp, hdr->what);
-	}
-	else if (hdr->where == HDR_RESP) {
-		http_CollectHdr(req->resp, hdr->what);
+		http_CollectHdr(ctx->http_bereq, hdr->what);
+	} else if (hdr->where == HDR_BERESP) {
+		http_CollectHdr(ctx->http_beresp, hdr->what);
+	} else if (hdr->where == HDR_RESP) {
+		http_CollectHdr(ctx->http_resp, hdr->what);
 	}
 }
diff --git a/lib/libvmod_std/vmod_std_conversions.c b/lib/libvmod_std/vmod_std_conversions.c
index 96456b2..c763aa3 100644
--- a/lib/libvmod_std/vmod_std_conversions.c
+++ b/lib/libvmod_std/vmod_std_conversions.c
@@ -39,12 +39,12 @@
 #include "vcc_if.h"
 
 VCL_DURATION __match_proto__()
-vmod_duration(struct req *req, const char *p, VCL_DURATION d)
+vmod_duration(const struct vrt_ctx *ctx, const char *p, VCL_DURATION d)
 {
 	char *e;
 	double r;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 
 	if (p == NULL)
 		return (d);
@@ -89,12 +89,12 @@ vmod_duration(struct req *req, const char *p, VCL_DURATION d)
 }
 
 VCL_INT __match_proto__()
-vmod_integer(struct req *req, const char *p, VCL_INT i)
+vmod_integer(const struct vrt_ctx *ctx, const char *p, VCL_INT i)
 {
 	char *e;
 	long r;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 
 	if (p == NULL)
 		return (i);
diff --git a/lib/libvmod_std/vmod_std_fileread.c b/lib/libvmod_std/vmod_std_fileread.c
index 163926c..5ddc6bf 100644
--- a/lib/libvmod_std/vmod_std_fileread.c
+++ b/lib/libvmod_std/vmod_std_fileread.c
@@ -83,12 +83,12 @@ free_frfile(void *ptr)
 }
 
 VCL_STRING __match_proto__(td_std_fileread)
-vmod_fileread(struct req *req, struct vmod_priv *priv, VCL_STRING file_name)
+vmod_fileread(const struct vrt_ctx *ctx, struct vmod_priv *priv, VCL_STRING file_name)
 {
 	struct frfile *frf = NULL;
 	char *s;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	AN(priv);
 
 	if (priv->priv != NULL) {



More information about the varnish-commit mailing list