[6.0] 1472ac416 Make each event sent to compiled VCL a separate task as far as per-task PRIVs.

Dridi Boukelmoune dridi.boukelmoune at gmail.com
Wed Oct 31 13:08:10 UTC 2018


commit 1472ac4167a414ab5d7976159616128bcca0cbcb
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Tue Aug 28 21:42:08 2018 +0000

    Make each event sent to compiled VCL a separate task as far as
    per-task PRIVs.
    
    Fixes: #2749

diff --git a/bin/varnishd/cache/cache_vcl.c b/bin/varnishd/cache/cache_vcl.c
index 98cc47dec..9bd2dee51 100644
--- a/bin/varnishd/cache/cache_vcl.c
+++ b/bin/varnishd/cache/cache_vcl.c
@@ -121,7 +121,6 @@ vcl_get_ctx(unsigned method, int msg)
 	}
 	ctx_cli.ws = &ws_cli;
 	WS_Assert(ctx_cli.ws);
-	VRTPRIV_init(cli_task_privs);
 	return (&ctx_cli);
 }
 
@@ -138,7 +137,6 @@ vcl_rel_ctx(struct vrt_ctx **ctx)
 	WS_Reset(&ws_cli, ws_snapshot_cli);
 	INIT_OBJ(*ctx, VRT_CTX_MAGIC);
 	*ctx = NULL;
-	VRTPRIV_dynamic_kill(cli_task_privs, (uintptr_t)cli_task_privs);
 }
 
 /*--------------------------------------------------------------------*/
@@ -163,7 +161,9 @@ vcl_send_event(VRT_CTX, enum vcl_event_e ev)
 	if (ev == VCL_EVENT_LOAD || ev == VCL_EVENT_WARM)
 		AN(ctx->msg);
 
+	VCL_TaskEnter(ctx->vcl, cli_task_privs);
 	r = ctx->vcl->conf->event_vcl(ctx, ev);
+	VCL_TaskLeave(ctx->vcl, cli_task_privs);
 
 	if (r && (ev == VCL_EVENT_COLD || ev == VCL_EVENT_DISCARD))
 		WRONG("A VMOD cannot fail COLD or DISCARD events");


More information about the varnish-commit mailing list