diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c
index cec88657446dd47d3533597c0295c8f0a51310f2..156c6660445eb0af8601cf70d3b44c40e644f09e 100644
--- a/test/core/util/passthru_endpoint.c
+++ b/test/core/util/passthru_endpoint.c
@@ -138,8 +138,9 @@ static const grpc_endpoint_vtable vtable = {
     me_shutdown, me_destroy, me_get_peer,
 };
 
-static void half_init(half *m) {
+static void half_init(half *m, passthru_endpoint *parent) {
   m->base.vtable = &vtable;
+  m->parent = parent;
   gpr_slice_buffer_init(&m->read_buffer);
   m->on_read = NULL;
 }
@@ -147,8 +148,8 @@ static void half_init(half *m) {
 void grpc_passthru_endpoint_create(grpc_endpoint **client,
                                    grpc_endpoint **server) {
   passthru_endpoint *m = gpr_malloc(sizeof(*m));
-  half_init(&m->client);
-  half_init(&m->server);
+  half_init(&m->client, m);
+  half_init(&m->server, m);
   gpr_mu_init(&m->mu);
   *client = &m->client.base;
   *server = &m->server.base;