fixed race condition in return value of netconn_gethostbyname() (and thus also lwip_gethostbyname/_r() and lwip_getaddrinfo())

Signed-off-by: sg <goldsimon@gmx.de>
diff --git a/CHANGELOG b/CHANGELOG
index 8877eae..4371f02 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -26,6 +26,10 @@
 
   ++ Bugfixes:
 
+  2016-12-16: Thomas Mueller
+  * api_lib.c: fixed race condition in return value of netconn_gethostbyname()
+    (and thus also lwip_gethostbyname/_r() and lwip_getaddrinfo())
+
   2016-12-15: David van Moolenbroek
   * opt.h, tcp: added LWIP_HOOK_TCP_ISN() to implement less predictable initial
     sequence numbers (see contrib/addons/tcp_isn for an example implementation)
diff --git a/src/api/api_lib.c b/src/api/api_lib.c
index 1e356aa..98f232d 100644
--- a/src/api/api_lib.c
+++ b/src/api/api_lib.c
@@ -932,6 +932,7 @@
   sys_sem_t sem;
 #endif /* LWIP_MPU_COMPATIBLE */
   err_t err;
+  err_t cberr;
 
   LWIP_ERROR("netconn_gethostbyname: invalid name", (name != NULL), return ERR_ARG;);
   LWIP_ERROR("netconn_gethostbyname: invalid addr", (addr != NULL), return ERR_ARG;);
@@ -964,13 +965,13 @@
   }
 #endif /* LWIP_NETCONN_SEM_PER_THREAD */
 
-  err = tcpip_callback(lwip_netconn_do_gethostbyname, &API_VAR_REF(msg));
-  if (err != ERR_OK) {
+  cberr = tcpip_callback(lwip_netconn_do_gethostbyname, &API_VAR_REF(msg));
+  if (cberr != ERR_OK) {
 #if !LWIP_NETCONN_SEM_PER_THREAD
     sys_sem_free(API_EXPR_REF(API_VAR_REF(msg).sem));
 #endif /* !LWIP_NETCONN_SEM_PER_THREAD */
     API_VAR_FREE(MEMP_DNS_API_MSG, msg);
-    return err;
+    return cberr;
   }
   sys_sem_wait(API_EXPR_REF_SEM(API_VAR_REF(msg).sem));
 #if !LWIP_NETCONN_SEM_PER_THREAD