From c7614cf2779c4909d8ec3f64923242cfd02f157a Mon Sep 17 00:00:00 2001
From: David Klempner <klempner@google.com>
Date: Fri, 13 May 2016 15:21:57 -0700
Subject: [PATCH] Fix declarations in port.h to not be ambiguous in C due to
 K&R.

Also actually add the port parameter to grpc_recycle_unused_port.

Also remove the downsizing gpr_realloc in the recycle codepath, which is
unnecessary and can free the pointer.
---
 test/core/util/port.h         |  6 +++---
 test/core/util/port_posix.c   | 25 ++++++++++++-------------
 test/core/util/port_windows.c |  1 -
 3 files changed, 15 insertions(+), 17 deletions(-)

diff --git a/test/core/util/port.h b/test/core/util/port.h
index 4b70fdc978..faeabbae9b 100644
--- a/test/core/util/port.h
+++ b/test/core/util/port.h
@@ -40,16 +40,16 @@ extern "C" {
 
 /* pick a port number that is currently unused by either tcp or udp. return
    0 on failure. */
-int grpc_pick_unused_port();
+int grpc_pick_unused_port(void);
 /* pick a port number that is currently unused by either tcp or udp. abort
    on failure. */
-int grpc_pick_unused_port_or_die();
+int grpc_pick_unused_port_or_die(void);
 
 /* Return a port which was previously returned by grpc_pick_unused_port().
  * Implementations of grpc_pick_unused_port() backed by a portserver may limit
  * the total number of ports available; this lets a binary return its allocated
  * ports back to the server if it is going to allocate a large number. */
-void grpc_recycle_unused_port();
+void grpc_recycle_unused_port(int port);
 
 #ifdef __cplusplus
 }
diff --git a/test/core/util/port_posix.c b/test/core/util/port_posix.c
index 32b1849ec4..7e270ff975 100644
--- a/test/core/util/port_posix.c
+++ b/test/core/util/port_posix.c
@@ -73,21 +73,20 @@ static int free_chosen_port(int port) {
   int found = 0;
   size_t found_at = 0;
   char *env = gpr_getenv("GRPC_TEST_PORT_SERVER");
-  if (env != NULL) {
-    /* Find the port and erase it from the list, then tell the server it can be
-       freed. */
-    for (i = 0; i < num_chosen_ports; i++) {
-      if (chosen_ports[i] == port) {
-        GPR_ASSERT(found == 0);
-        found = 1;
-        found_at = i;
-      }
+  /* Find the port and erase it from the list, then tell the server it can be
+     freed. */
+  for (i = 0; i < num_chosen_ports; i++) {
+    if (chosen_ports[i] == port) {
+      GPR_ASSERT(found == 0);
+      found = 1;
+      found_at = i;
     }
-    if (found) {
-      chosen_ports[found_at] = chosen_ports[num_chosen_ports - 1];
+  }
+  if (found) {
+    chosen_ports[found_at] = chosen_ports[num_chosen_ports - 1];
+    num_chosen_ports--;
+    if (env) {
       grpc_free_port_using_server(env, port);
-      num_chosen_ports--;
-      chosen_ports = gpr_realloc(chosen_ports, sizeof(int) * num_chosen_ports);
     }
   }
   return found;
diff --git a/test/core/util/port_windows.c b/test/core/util/port_windows.c
index 29f3404b2a..36c8d2856c 100644
--- a/test/core/util/port_windows.c
+++ b/test/core/util/port_windows.c
@@ -90,7 +90,6 @@ static int free_chosen_port(int port) {
       chosen_ports[found_at] = chosen_ports[num_chosen_ports - 1];
       grpc_free_port_using_server(env, port);
       num_chosen_ports--;
-      chosen_ports = gpr_realloc(chosen_ports, sizeof(int) * num_chosen_ports);
     }
   }
   return found;
-- 
GitLab