Commit 2ee6c334 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

set async.done to TRUE last in the addrinfo callback to prevent the risk that

the multi-threaded resolver does wrong
parent be7ce435
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -115,7 +115,6 @@ static void addrinfo_callback(void *arg, /* "struct connectdata *" */
  struct connectdata *conn = (struct connectdata *)arg;
  struct Curl_dns_entry *dns = NULL;

  conn->async.done = TRUE;
  conn->async.status = status;

  if(CURL_ASYNC_SUCCESS == status) {
@@ -147,6 +146,11 @@ static void addrinfo_callback(void *arg, /* "struct connectdata *" */

  conn->async.dns = dns;

 /* Set async.done TRUE last in this function since it may be used multi-
    threaded and once this is TRUE the other thread may read fields from the
    async struct */
  conn->async.done = TRUE;

  /* ipv4: The input hostent struct will be freed by ares when we return from
     this function */
}