Unverified Commit 49d75a4c authored by Anders Bakken's avatar Anders Bakken Committed by Daniel Stenberg
Browse files

connect: fix race condition with happy eyeballs timeout

The timer should be started after conn->connecttime is set. Otherwise
the timer could expire without this condition being true:

    /* should we try another protocol family? */
    if(i == 0 && conn->tempaddr[1] == NULL &&
      curlx_tvdiff(now, conn->connecttime) >= HAPPY_EYEBALLS_TIMEOUT) {

Ref: #1928
parent c66d94d6
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -1161,7 +1161,6 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
  conn->tempaddr[1] = NULL;
  conn->tempaddr[1] = NULL;
  conn->tempsock[0] = CURL_SOCKET_BAD;
  conn->tempsock[0] = CURL_SOCKET_BAD;
  conn->tempsock[1] = CURL_SOCKET_BAD;
  conn->tempsock[1] = CURL_SOCKET_BAD;
  Curl_expire(conn->data, HAPPY_EYEBALLS_TIMEOUT, EXPIRE_HAPPY_EYEBALLS);


  /* Max time for the next connection attempt */
  /* Max time for the next connection attempt */
  conn->timeoutms_per_addr =
  conn->timeoutms_per_addr =
@@ -1182,6 +1181,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
  }
  }


  data->info.numconnects++; /* to track the number of connections made */
  data->info.numconnects++; /* to track the number of connections made */
  Curl_expire(conn->data, HAPPY_EYEBALLS_TIMEOUT, EXPIRE_HAPPY_EYEBALLS);


  return CURLE_OK;
  return CURLE_OK;
}
}