chiark / gitweb /
@@@ tvec and tty mess
[mLib] / test / tvec-remote.c
index 637f851efde34a2f00cc3c4a73286874671b246b..7fbd1b6e1fc21e80a8811ea02cb5dad02e3c98fc 100644 (file)
@@ -667,7 +667,7 @@ int tvec_remoteserver(int infd, int outfd, const struct tvec_config *config)
        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. */
@@ -803,7 +803,7 @@ int tvec_remoteserver(int infd, int outfd, const struct tvec_config *config)
        /* 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);
@@ -821,7 +821,7 @@ end:
   /* 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);
@@ -1932,16 +1932,17 @@ void tvec_remotesetup(struct tvec_state *tv, const struct tvec_env *env,
   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@ --- *
@@ -2212,7 +2213,6 @@ void tvec_remoteteardown(struct tvec_state *tv, void *ctx)
   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))