diff --git a/src/core/iomgr/tcp_server_posix.c b/src/core/iomgr/tcp_server_posix.c
index fbc0e974e67cb3ec8c24a2d44313c42ad3a0dff1..5daf406c99d6677fe76a86b67735f8f132e3cb01 100644
--- a/src/core/iomgr/tcp_server_posix.c
+++ b/src/core/iomgr/tcp_server_posix.c
@@ -144,13 +144,13 @@ grpc_tcp_server *grpc_tcp_server_create(void) {
 }
 
 static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
-  grpc_tcp_listener *sp;
-
   grpc_exec_ctx_enqueue(exec_ctx, s->shutdown_complete, 1);
 
   gpr_mu_destroy(&s->mu);
 
-  for (sp = s->head; sp; sp = sp->next) {
+  while (s->head) {
+    grpc_tcp_listener *sp = s->head;
+    s->head = sp->next;
     grpc_tcp_listener_unref(sp);
   }