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

Robert Iakobashvili made the 'master_buffer' get allocated first once it is

can/will be used as it then makes the common cases save 16KB of data for each
easy handle that isn't used for pipelining.
parent 6a35841b
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -6,6 +6,11 @@

                                  Changelog

Daniel S (24 April 2007)
- Robert Iakobashvili made the 'master_buffer' get allocated first once it is
  can/will be used as it then makes the common cases save 16KB of data for each
  easy handle that isn't used for pipelining.

Dan F (23 April 2007)
- Added <postcheck> support to the test harness.

+4 −3
Original line number Diff line number Diff line
@@ -11,8 +11,9 @@ Curl and libcurl 7.16.3

This release includes the following changes:
 
 o Added curl_multi_socket_action()
 o Deprecated curl_multi_socket()
 o added curl_multi_socket_action()
 o deprecated curl_multi_socket()
 o uses less memory in non-pipelined use cases

This release includes the following bugfixes:

@@ -34,7 +35,7 @@ This release includes the following known bugs:

Other curl-related news:

 o PycURL 7.16.2 was released: http://pycurl.sf.net/
 o PycURL 7.16.2.1 was released: http://pycurl.sf.net/
 o TclCurl 7.16.2 was released:
   http://personal1.iddeo.es/andresgarci/tclcurl/english/

+1 −1
Original line number Diff line number Diff line
@@ -495,7 +495,7 @@ int Curl_read(struct connectdata *conn, /* connection data */
    }
    /* If we come here, it means that there is no data to read from the buffer,
     * so we read from the socket */
    bytesfromsocket = MIN(sizerequested, sizeof(conn->master_buffer));
    bytesfromsocket = MIN(sizerequested, BUFSIZE * sizeof (char));
    buffertofill = conn->master_buffer;
  }
  else {
+7 −2
Original line number Diff line number Diff line
@@ -289,8 +289,13 @@ static void read_rewind(struct connectdata *conn,
    size_t show;

    show = MIN(conn->buf_len - conn->read_pos, sizeof(buf)-1);
    if (conn->master_buffer) {
        memcpy(buf, conn->master_buffer + conn->read_pos, show);
        buf[show] = '\0';
    }
    else {
        buf[0] = '\0';
    }

    DEBUGF(infof(conn->data,
                 "Buffer after stream rewind (read_pos = %d): [%s]",
+11 −1
Original line number Diff line number Diff line
@@ -1789,6 +1789,7 @@ static void conn_free(struct connectdata *conn)
  Curl_safefree(conn->trailer);
  Curl_safefree(conn->host.rawalloc); /* host name buffer */
  Curl_safefree(conn->proxy.rawalloc); /* proxy name buffer */
  Curl_safefree(conn->master_buffer);

  Curl_llist_destroy(conn->send_pipe, NULL);
  Curl_llist_destroy(conn->recv_pipe, NULL);
@@ -2825,7 +2826,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
     to not have to modify everything at once, we allocate a temporary
     connection data struct and fill in for comparison purposes. */

  conn = (struct connectdata *)calloc(sizeof(struct connectdata), 1);
  conn = (struct connectdata *)calloc(1, sizeof(struct connectdata));
  if(!conn) {
    *in_connect = NULL; /* clear the pointer */
    return CURLE_OUT_OF_MEMORY;
@@ -2835,6 +2836,14 @@ static CURLcode CreateConnection(struct SessionHandle *data,
     any failure */
  *in_connect = conn;

  if (data->multi && Curl_multi_canPipeline(data->multi) &&
      !conn->master_buffer) {
    /* Allocate master_buffer to be used for pipelining */
    conn->master_buffer = calloc(BUFSIZE, sizeof (char));
    if (!conn->master_buffer)
      return CURLE_OUT_OF_MEMORY;
  }

  /* and we setup a few fields in case we end up actually using this struct */

  conn->data = data; /* Setup the association between this connection
@@ -3803,6 +3812,7 @@ else {
    Curl_safefree(old_conn->proxypasswd);
    Curl_llist_destroy(old_conn->send_pipe, NULL);
    Curl_llist_destroy(old_conn->recv_pipe, NULL);
    Curl_safefree(old_conn->master_buffer);

    free(old_conn);          /* we don't need this anymore */

Loading