Skip to content
Snippets Groups Projects
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
No related branches found
No related tags found
No related merge requests found
......@@ -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.
......
......@@ -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/
......
......@@ -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 {
......
......@@ -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);
memcpy(buf, conn->master_buffer + conn->read_pos, show);
buf[show] = '\0';
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]",
......
......@@ -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 */
......
......@@ -868,7 +868,8 @@ struct connectdata {
struct curl_llist *recv_pipe; /* List of handles waiting to read
their responses on this pipeline */
char master_buffer[BUFSIZE]; /* The master buffer for this connection. */
char* master_buffer; /* The master buffer allocated on-demand;
used for pipelining. */
size_t read_pos; /* Current read position in the master buffer */
size_t buf_len; /* Length of the buffer?? */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment