Commit 5a83976c authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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.
parent b5276a9a
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -964,6 +964,12 @@ CURLcode Curl_readwrite(struct connectdata *conn,

          /* convert LF to CRLF if so asked */
          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++) {
              if (conn->upload_fromhere[i] == 0x0a) {
                data->state.scratch[si++] = 0x0d;
+3 −0
Original line number Diff line number Diff line
@@ -190,6 +190,9 @@ CURLcode Curl_close(struct SessionHandle *data)
  if(data->state.auth_host)
    free(data->state.auth_host);

  if(data->state.scratch)
    free(data->state.scratch);

  if(data->change.proxy_alloc)
    free(data->change.proxy);

+1 −1
Original line number Diff line number Diff line
@@ -598,7 +598,7 @@ struct UrlState {
  struct curl_ssl_session *session; /* array of 'numsessions' size */
  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.
                    This must be set to FALSE every time _easy_perform() is
                    called. */