summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2020-06-01 22:44:14 +0100
committerEdward Thomson <ethomson@edwardthomson.com>2020-06-02 00:01:16 +0100
commit04c7bdb42e4e8b374d5880358c7911236795fbcb (patch)
tree5fc9b20b3945e1fde8680bc2cc00f9ed073f8108
parentaa8b2c0f6068454d30e9b0f20f424311337a37f1 (diff)
downloadlibgit2-ethomson/http.tar.gz
httpclient: clear the read_buf on new requestsethomson/http
The httpclient implementation keeps a `read_buf` that holds the data in the body of the response after the headers have been written. We store that data for subsequent calls to `git_http_client_read_body`. If we want to stop reading body data and send another request, we need to clear that cached data. Clear the cached body data on new requests, just like we read any outstanding data from the socket.
-rw-r--r--src/transports/httpclient.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/transports/httpclient.c b/src/transports/httpclient.c
index 72a65f00f..010baa604 100644
--- a/src/transports/httpclient.c
+++ b/src/transports/httpclient.c
@@ -1195,7 +1195,7 @@ static void complete_response_body(git_http_client *client)
/* If we're not keeping alive, don't bother. */
if (!client->keepalive) {
client->connected = 0;
- return;
+ goto done;
}
parser_context.client = client;
@@ -1209,6 +1209,9 @@ static void complete_response_body(git_http_client *client)
git_error_clear();
client->connected = 0;
}
+
+done:
+ git_buf_clear(&client->read_buf);
}
int git_http_client_send_request(