Markus F.X.J. Oberhumer's patch that reduces memory usage quite a bit by
only allocating the scratch memory buffer once it is needed and not always in the handle.
This commit is contained in:
		| @@ -964,6 +964,12 @@ CURLcode Curl_readwrite(struct connectdata *conn, | |||||||
|  |  | ||||||
|           /* convert LF to CRLF if so asked */ |           /* convert LF to CRLF if so asked */ | ||||||
|           if (data->set.crlf) { |           if (data->set.crlf) { | ||||||
|  |               if(data->state.scratch == NULL) | ||||||
|  |                 data->state.scratch = malloc(2*BUFSIZE); | ||||||
|  |               if(data->state.scratch == NULL) { | ||||||
|  |                 failf (data, "Failed to alloc scratch buffer!"); | ||||||
|  |                 return CURLE_OUT_OF_MEMORY; | ||||||
|  |               } | ||||||
|             for(i = 0, si = 0; i < nread; i++, si++) { |             for(i = 0, si = 0; i < nread; i++, si++) { | ||||||
|               if (conn->upload_fromhere[i] == 0x0a) { |               if (conn->upload_fromhere[i] == 0x0a) { | ||||||
|                 data->state.scratch[si++] = 0x0d; |                 data->state.scratch[si++] = 0x0d; | ||||||
|   | |||||||
| @@ -190,6 +190,9 @@ CURLcode Curl_close(struct SessionHandle *data) | |||||||
|   if(data->state.auth_host) |   if(data->state.auth_host) | ||||||
|     free(data->state.auth_host); |     free(data->state.auth_host); | ||||||
|  |  | ||||||
|  |   if(data->state.scratch) | ||||||
|  |     free(data->state.scratch); | ||||||
|  |  | ||||||
|   if(data->change.proxy_alloc) |   if(data->change.proxy_alloc) | ||||||
|     free(data->change.proxy); |     free(data->change.proxy); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -598,7 +598,7 @@ struct UrlState { | |||||||
|   struct curl_ssl_session *session; /* array of 'numsessions' size */ |   struct curl_ssl_session *session; /* array of 'numsessions' size */ | ||||||
|   long sessionage;                  /* number of the most recent session */ |   long sessionage;                  /* number of the most recent session */ | ||||||
|  |  | ||||||
|   char scratch[BUFSIZE*2]; /* huge buffer when doing upload CRLF replacing */ |   char *scratch; /* huge buffer[BUFSIZE*2] when doing upload CRLF replacing */ | ||||||
|   bool errorbuf; /* Set to TRUE if the error buffer is already filled in. |   bool errorbuf; /* Set to TRUE if the error buffer is already filled in. | ||||||
|                     This must be set to FALSE every time _easy_perform() is |                     This must be set to FALSE every time _easy_perform() is | ||||||
|                     called. */ |                     called. */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Daniel Stenberg
					Daniel Stenberg