if (env && env->setup == tvec_remotesetup)
env = ((struct tvec_remoteenv *)env)->r.env;
if (!env || !env->ctxsz) ctx = 0;
- else ctx = x_alloc(srvtv.a, env->ctxsz);
+ else ctx = pool_alloc(srvtv.p_group, env->ctxsz);
if (env && env->setup) env->setup(&srvtv, env, 0, ctx);
/* Initialize the registers. */
/* Tear down the environment and release other resources. */
if (env && env->teardown) env->teardown(&srvtv, ctx);
tvec_releaseregs(&srvtv);
- x_free(srvtv.a, ctx); srvtv.test = 0; env = 0; ctx = 0;
+ srvtv.test = 0; env = 0; ctx = 0; pool_recycle(srvtv.p_group);
/* Report completion. */
QUEUEPK(&srvtv, &srvrc, QF_FORCE, TVPK_EGROUP | TVPF_ACK);
/* Clean up and return. */
if (env && env->teardown) env->teardown(&srvtv, ctx);
if (vd) vd->def.ty->release(&r->v, &vd->def);
- x_free(srvtv.a, ctx); x_free(srvtv.a, r_alloc);
+ x_free(srvtv.a, r_alloc); dstr_destroy(&d);
if (srvtv.test) tvec_releaseregs(&srvtv);
release_comms(&srvtv, &srvrc); tvec_end(&srvtv);
return (rc ? 2 : 0);
const struct tvec_remoteenv *re = (const struct tvec_remoteenv *)env;
const struct tvec_env *subenv = re->r.env;
- r->tv = tv;
+ r->tv = tv; r->subctx = 0;
init_comms(&r->rc);
r->re = re; r->kid = -1;
DCREATE(&r->prgwant); DCREATE(&r->progress);
if (connect_remote(tv, r))
tvec_skipgroup(tv, "failed to connect to test backend");
reset_vars(r);
- if (subenv && subenv->ctxsz) r->subctx = x_alloc(tv->a, subenv->ctxsz);
- else r->subctx = 0;
- if (subenv && subenv->setup) subenv->setup(tv, subenv, r, r->subctx);
+ if (subenv && subenv->ctxsz)
+ r->subctx = pool_alloc(tv->p_group, subenv->ctxsz);
+ if (subenv && subenv->setup)
+ subenv->setup(tv, subenv, r, r->subctx);
}
/* --- @tvec_remotefindvar@, @setvar_local@, @setvar_remote@ --- *
buf b;
if (subenv && subenv->teardown) subenv->teardown(tv, r->subctx);
- x_free(tv->a, r->subctx);
if (r->rc.outfd >= 0) {
QUEUEPK(tv, &r->rc, QF_FORCE, TVPK_EGROUP);
if (!handle_packets(tv, r, RCVF_ALLOWEOF, TVPK_EGROUP | TVPF_ACK, &b))