Commit 405d98ee authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

adapted to the new Curl_splayremovebyaddr() proto

parent f8172496
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -1239,6 +1239,7 @@ void Curl_expire(struct SessionHandle *data, long milli)
{
  struct Curl_multi *multi = data->multi;
  struct timeval *nowp = &data->state.expiretime;
  int rc;

  /* this is only interesting for multi-interface using libcurl, and only
     while there is still a multi interface struct remaining! */
@@ -1250,12 +1251,15 @@ void Curl_expire(struct SessionHandle *data, long milli)
    if(nowp->tv_sec) {
      /* Since this is an cleared time, we must remove the previous entry from
         the splay tree */
      multi->timetree = Curl_splayremovebyaddr(multi->timetree,
                                               &data->state.timenode);
      rc = Curl_splayremovebyaddr(multi->timetree,
                                  &data->state.timenode,
                                  &multi->timetree);
      if(rc)
        infof(data, "Internal error clearing splay node = %d\n", rc);
      infof(data, "Expire cleared\n");
    }
      nowp->tv_sec = nowp->tv_usec = 0;
    }
  }
  else {
    struct timeval set;
    int rest;
@@ -1272,7 +1276,9 @@ void Curl_expire(struct SessionHandle *data, long milli)
    }

    if(nowp->tv_sec) {
      /* compare if the new time is earlier, and only set it if so */
      /* This means that the struct is added as a node in the splay tree.
         Compare if the new time is earlier, and only remove-old/add-new if it
         is. */
      long diff = curlx_tvdiff(set, *nowp);
      if(diff > 0)
        /* the new expire time was later so we don't change this */
@@ -1280,8 +1286,11 @@ void Curl_expire(struct SessionHandle *data, long milli)

      /* Since this is an updated time, we must remove the previous entry from
         the splay tree first and then re-add the new value */
      multi->timetree = Curl_splayremovebyaddr(multi->timetree,
                                               &data->state.timenode);
      rc = Curl_splayremovebyaddr(multi->timetree,
                                  &data->state.timenode,
                                  &multi->timetree);
      if(rc)
        infof(data, "Internal error removing splay node = %d\n", rc);
    }

    *nowp = set;