diff --git a/src/core/security/security_context.c b/src/core/security/security_context.c
index adb026979252b4932af06b250be3131a06f9c6af..1909617614d29349b08257680d0c592aa93c31a3 100644
--- a/src/core/security/security_context.c
+++ b/src/core/security/security_context.c
@@ -349,11 +349,13 @@ static grpc_security_status ssl_channel_check_peer(grpc_security_context *ctx,
                                                    void *user_data) {
   grpc_ssl_channel_security_context *c =
       (grpc_ssl_channel_security_context *)ctx;
-  grpc_security_status status = ssl_check_peer(c->overridden_target_name != NULL
-                                                   ? c->overridden_target_name
-                                                   : c->target_name,
-                                               &peer);
+  grpc_security_status status;
+  tsi_peer_destruct(&c->peer);
   c->peer = peer;
+  status = ssl_check_peer(c->overridden_target_name != NULL
+                              ? c->overridden_target_name
+                              : c->target_name,
+                          &peer);
   return status;
 }