Commit ccdaa0b5 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Make the 'areschannel' get created in the curl_easy_init() and re-use that

same channel during the whole curl handle's life until curl_easy_cleanup().
parent f5167349
Loading
Loading
Loading
Loading
+12 −24
Original line number Diff line number Diff line
@@ -469,7 +469,6 @@ CURLcode Curl_is_resolved(struct connectdata *conn,

  if(conn->async.done) {
    /* we're done, kill the ares handle */
    ares_destroy(data->state.areschannel);
    if(!conn->async.dns)
      return CURLE_COULDNT_RESOLVE_HOST;
    *dns = conn->async.dns;
@@ -536,9 +535,6 @@ CURLcode Curl_wait_for_resolv(struct connectdata *conn,
  /* Operation complete, if the lookup was successful we now have the entry
     in the cache. */
    
  /* this destroys the channel and we cannot use it anymore after this */
  ares_destroy(data->state.areschannel);

  if(entry)
    *entry = conn->async.dns;

@@ -613,17 +609,11 @@ static Curl_addrinfo *my_getaddrinfo(struct connectdata *conn,
                                     int port,
                                     int *waitp)
{
  int rc;
  char *bufp;
  struct SessionHandle *data = conn->data;

  rc = ares_init(&data->state.areschannel);

  *waitp = FALSE;
  
  if(!rc) {
    /* only if success */

  bufp = strdup(hostname);

  if(bufp) {
@@ -634,15 +624,13 @@ static Curl_addrinfo *my_getaddrinfo(struct connectdata *conn,
    conn->async.status = 0;   /* clear */
    conn->async.dns = NULL;   /* clear */

    /* areschannel is already setup in the Curl_open() function */
    ares_gethostbyname(data->state.areschannel, hostname, PF_INET,
                       host_callback, conn);

      
    *waitp = TRUE; /* please wait for the response */
  }
    else
      ares_destroy(data->state.areschannel);
  }

  return NULL; /* no struct yet */
  
+14 −1
Original line number Diff line number Diff line
@@ -233,6 +233,11 @@ CURLcode Curl_close(struct SessionHandle *data)

  Curl_digest_cleanup(data);

#ifdef USE_ARES
  /* this destroys the channel and we cannot use it anymore after this */
  ares_destroy(data->state.areschannel);
#endif

  /* No longer a dirty share, if it exists */
  if (data->share)
    data->share->dirty--;
@@ -253,6 +258,15 @@ CURLcode Curl_open(struct SessionHandle **curl)

  memset(data, 0, sizeof(struct SessionHandle));

#ifdef USE_ARES
  if(ARES_SUCCESS != ares_init(&data->state.areschannel)) {
    free(data);
    return CURLE_FAILED_INIT;
  }
  /* make sure that all other returns from this function should destroy the
     ares channel before returning error! */
#endif

  /* We do some initial setup here, all those fields that can't be just 0 */

  data->state.headerbuff=(char*)malloc(HEADERSIZE);
@@ -319,7 +333,6 @@ CURLcode Curl_open(struct SessionHandle **curl)
  data->set.ssl.CAfile = (char *)CURL_CA_BUNDLE;
#endif


  memset(data->state.connects, 0,
         sizeof(struct connectdata *)*data->state.numconnects);