bin/varnishd/cache/cache_vcl.c
struct vsb *
VCL_Rel_CliCtx(struct vrt_ctx **ctx)
{
	struct vsb *r = NULL;

	ASSERT_CLI();
	assert(*ctx == &ctx_cli);
	AN((*ctx)->handling);
	if (ctx_cli.msg) {
		TAKE_OBJ_NOTNULL(r, &ctx_cli.msg, VSB_MAGIC);
		AZ(VSB_finish(r));
	}
	if (ctx_cli.vsl)
		VSL_Flush(ctx_cli.vsl, 0);
	WS_Assert(ctx_cli.ws);
	WS_Rollback(&ws_cli, ws_snapshot_cli);
	INIT_OBJ(*ctx, VRT_CTX_MAGIC);
	*ctx = NULL;

	return (r);
}
/*
 * releases CLI ctx
 *
 * returns finished error msg vsb if VCL_Get_CliCtx(1) was called
 *
 * caller needs to VSB_destroy a non-NULL return value
 *
 */
releases CLI ctx
returns finished error msg vsb if VCL_Get_CliCtx(1) was called

caller needs to VSB_destroy a non-NULL return value
releases CLI ctx returns finished error msg vsb if VCL_Get_CliCtx ( 1 ) was called caller needs to VSB_destroy a non - NULL return value
struct vsb *
VCL_Rel_CliCtx(struct vrt_ctx **ctx)
{
	struct vsb *r = NULL;
	ASSERT_CLI();
	assert(*ctx == &ctx_cli);
	AN((*ctx)->handling);
	if (ctx_cli.msg) {
		TAKE_OBJ_NOTNULL(r, &ctx_cli.msg, VSB_MAGIC);
		AZ(VSB_finish(r));
	}
	if (ctx_cli.vsl)
		VSL_Flush(ctx_cli.vsl, 0);
	WS_Assert(ctx_cli.ws);
	WS_Rollback(&ws_cli, ws_snapshot_cli);
	INIT_OBJ(*ctx, VRT_CTX_MAGIC);
	*ctx = NULL;
	return (r);
}
struct vsb * VCL_Rel_CliCtx ( struct vrt_ctx * * ctx ) { struct vsb * r = NULL ; ASSERT_CLI ( ) ; assert ( * ctx == & ctx_cli ) ; AN ( ( * ctx ) -> handling ) ; if ( ctx_cli . msg ) { TAKE_OBJ_NOTNULL ( r , & ctx_cli . msg , VSB_MAGIC ) ; AZ ( VSB_finish ( r ) ) ; } if ( ctx_cli . vsl ) VSL_Flush ( ctx_cli . vsl , 0 ) ; WS_Assert ( ctx_cli . ws ) ; WS_Rollback ( & ws_cli , ws_snapshot_cli ) ; INIT_OBJ ( * ctx , VRT_CTX_MAGIC ) ; * ctx = NULL ; return ( r ) ; }
releases CLI ctx
 returns finished error msg vsb if VCL_Get_CliCtx(1) was called
releases CLI ctx returns finished error msg vsb if VCL_Get_CliCtx ( 1 ) was called