Adapt to filter api changes

parent dacf9c4d
...@@ -169,7 +169,7 @@ mk_dup(int oldfd, int newfd) ...@@ -169,7 +169,7 @@ mk_dup(int oldfd, int newfd)
} }
static int v_matchproto_(vdp_init_f) static int v_matchproto_(vdp_init_f)
vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore) vdp_init(VRT_CTX, struct vdp_ctx *vc, void **priv, struct objcore *objcore)
{ {
struct req *req; struct req *req;
struct vdp_state *state; struct vdp_state *state;
...@@ -177,21 +177,20 @@ vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore) ...@@ -177,21 +177,20 @@ vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore)
struct vdp_map map_entry, *map; struct vdp_map map_entry, *map;
struct VPFX(pipe_vdp) *obj; struct VPFX(pipe_vdp) *obj;
int in[2], out[2], err[2]; int in[2], out[2], err[2];
struct vrt_ctx fake_ctx[1];
struct vmod_priv *task_priv; struct vmod_priv *task_priv;
struct task_cfg *task; struct task_cfg *task;
struct setenv_head *setenv_head; struct setenv_head *setenv_head;
char **argv; char **argv;
CHECK_OBJ_NOTNULL(ctx, VDP_CTX_MAGIC); CHECK_OBJ_NOTNULL(vc, VDP_CTX_MAGIC);
req = ctx->req; req = vc->req;
CHECK_OBJ_NOTNULL(req, REQ_MAGIC); CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
AN(req->vcl); AN(req->vcl);
AN(priv); AN(priv);
AZ(*priv); AZ(*priv);
CHECK_OBJ_ORNULL(objcore, OBJCORE_MAGIC); CHECK_OBJ_ORNULL(objcore, OBJCORE_MAGIC);
vdpe = VTAILQ_LAST(&ctx->vdp, vdp_entry_s); vdpe = VTAILQ_LAST(&vc->vdp, vdp_entry_s);
CHECK_OBJ_NOTNULL(vdpe, VDP_ENTRY_MAGIC); CHECK_OBJ_NOTNULL(vdpe, VDP_ENTRY_MAGIC);
AN(vdpe->vdp); AN(vdpe->vdp);
map_entry.vdp = vdpe->vdp; map_entry.vdp = vdpe->vdp;
...@@ -205,13 +204,13 @@ vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore) ...@@ -205,13 +204,13 @@ vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore)
errno = 0; errno = 0;
ALLOC_OBJ(state, PIPE_VDP_STATE_MAGIC); ALLOC_OBJ(state, PIPE_VDP_STATE_MAGIC);
if (state == NULL) { if (state == NULL) {
VSLb(ctx->vsl, SLT_Error, "vdfp_pipe: vdp %s: cannot allocate " VSLb(vc->vsl, SLT_Error, "vdfp_pipe: vdp %s: cannot allocate "
"state: %s", obj->name, VAS_errtxt(errno)); "state: %s", obj->name, VAS_errtxt(errno));
return (-1); return (-1);
} }
state->buf = malloc(obj->bufsz); state->buf = malloc(obj->bufsz);
if (state->buf == NULL) { if (state->buf == NULL) {
VSLb(ctx->vsl, SLT_Error, "vdfp_pipe: vdp %s: cannot allocate " VSLb(vc->vsl, SLT_Error, "vdfp_pipe: vdp %s: cannot allocate "
"buffer size %zd: %s", obj->name, obj->bufsz, "buffer size %zd: %s", obj->name, obj->bufsz,
VAS_errtxt(errno)); VAS_errtxt(errno));
return (-1); return (-1);
...@@ -226,14 +225,10 @@ vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore) ...@@ -226,14 +225,10 @@ vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore)
argv = obj->argv; argv = obj->argv;
setenv_head = obj->setenv_head; setenv_head = obj->setenv_head;
/* Hackishly using non-API knowledge of VRT_priv_task() */ task_priv = VRT_priv_task(ctx, obj);
INIT_OBJ(fake_ctx, VRT_CTX_MAGIC);
fake_ctx->req = req;
fake_ctx->ws = req->ws;
task_priv = VRT_priv_task(fake_ctx, obj);
AN(priv); AN(priv);
if (task_priv->priv != NULL) { if (task_priv->priv != NULL) {
AN(WS_Allocated(fake_ctx->ws, task_priv->priv, sizeof(*task))); AN(WS_Allocated(ctx->ws, task_priv->priv, sizeof(*task)));
CAST_OBJ_NOTNULL(task, task_priv->priv, PIPE_TASK_MAGIC); CAST_OBJ_NOTNULL(task, task_priv->priv, PIPE_TASK_MAGIC);
if (task->argv != NULL) if (task->argv != NULL)
argv = task->argv; argv = task->argv;
...@@ -241,17 +236,17 @@ vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore) ...@@ -241,17 +236,17 @@ vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore)
setenv_head = task->setenv_head; setenv_head = task->setenv_head;
} }
if (mk_pipe(in, obj->name, ctx->vsl) != 0) if (mk_pipe(in, obj->name, vc->vsl) != 0)
return (-1); return (-1);
if (mk_pipe(out, obj->name, ctx->vsl) != 0) if (mk_pipe(out, obj->name, vc->vsl) != 0)
return (-1); return (-1);
if (mk_pipe(err, obj->name, ctx->vsl) != 0) if (mk_pipe(err, obj->name, vc->vsl) != 0)
return (-1); return (-1);
errno = 0; errno = 0;
state->chldpid = fork(); state->chldpid = fork();
if (state->chldpid < 0) { if (state->chldpid < 0) {
VSLb(ctx->vsl, SLT_Error, "vdfp_pipe: vdp %s: fork failed for " VSLb(vc->vsl, SLT_Error, "vdfp_pipe: vdp %s: fork failed for "
"%s: %s", obj->name, obj->path, VAS_errtxt(errno)); "%s: %s", obj->name, obj->path, VAS_errtxt(errno));
closefd(&in[0]); closefd(&in[0]);
closefd(&in[1]); closefd(&in[1]);
...@@ -299,7 +294,7 @@ vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore) ...@@ -299,7 +294,7 @@ vdp_init(struct vdp_ctx *ctx, void **priv, struct objcore *objcore)
} }
} }
VSLb(ctx->vsl, SLT_Notice, "vdfp_pipe: vdp %s: exec'd %s as pid %jd", VSLb(vc->vsl, SLT_Notice, "vdfp_pipe: vdp %s: exec'd %s as pid %jd",
obj->name, obj->path, (intmax_t)state->chldpid); obj->name, obj->path, (intmax_t)state->chldpid);
closefd(&in[0]); closefd(&in[0]);
closefd(&out[1]); closefd(&out[1]);
...@@ -660,7 +655,11 @@ vmod_vdp__init(VRT_CTX, struct VPFX(pipe_vdp) **vdpp, const char *obj_name, ...@@ -660,7 +655,11 @@ vmod_vdp__init(VRT_CTX, struct VPFX(pipe_vdp) **vdpp, const char *obj_name,
vdp->init = vdp_init; vdp->init = vdp_init;
vdp->bytes = vdp_bytes; vdp->bytes = vdp_bytes;
vdp->fini = vdp_fini; vdp->fini = vdp_fini;
VRT_AddVDP(ctx, vdp);
// XXX free mem etc
if (VRT_AddFilter(ctx, NULL, vdp)) {
return;
}
vdp_obj->vdp = vdp; vdp_obj->vdp = vdp;
errno = 0; errno = 0;
...@@ -689,7 +688,7 @@ vmod_vdp__init(VRT_CTX, struct VPFX(pipe_vdp) **vdpp, const char *obj_name, ...@@ -689,7 +688,7 @@ vmod_vdp__init(VRT_CTX, struct VPFX(pipe_vdp) **vdpp, const char *obj_name,
return; return;
} }
/* Event function calls VRT_RemoveVDP(), since it needs a VRT_CTX. */ /* Event function calls VRT_RemoveFilter, since it needs a VRT_CTX. */
VCL_VOID VCL_VOID
vmod_vdp__fini(struct VPFX(pipe_vdp) **vdpp) vmod_vdp__fini(struct VPFX(pipe_vdp) **vdpp)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment