diff --git a/test/core/util/port_server_client.c b/test/core/util/port_server_client.c
index d381cffdcce3c2823453c540459f4e1a0c9249d1..f1dcdbb3c1121628c62ba862cbc2b117f29d09a1 100644
--- a/test/core/util/port_server_client.c
+++ b/test/core/util/port_server_client.c
@@ -107,8 +107,8 @@ void grpc_free_port_using_server(int port) {
                                        grpc_schedule_on_exec_ctx),
                    &rsp);
   grpc_resource_quota_unref_internal(&exec_ctx, resource_quota);
-  gpr_mu_lock(pr.mu);
   grpc_exec_ctx_flush(&exec_ctx);
+  gpr_mu_lock(pr.mu);
   while (!pr.done) {
     grpc_pollset_worker *worker = NULL;
     if (!GRPC_LOG_IF_ERROR(
@@ -240,8 +240,8 @@ int grpc_pick_port_using_server(void) {
       grpc_closure_create(got_port_from_server, &pr, grpc_schedule_on_exec_ctx),
       &pr.response);
   grpc_resource_quota_unref_internal(&exec_ctx, resource_quota);
-  gpr_mu_lock(pr.mu);
   grpc_exec_ctx_flush(&exec_ctx);
+  gpr_mu_lock(pr.mu);
   while (pr.port == -1) {
     grpc_pollset_worker *worker = NULL;
     if (!GRPC_LOG_IF_ERROR(