Jonathan Tan <jonathantanmy@xxxxxxxxxx> writes: >> Thanks for fixing it. >> >> Is there a particular patch this should be squashed into, or does it >> stand alone? It the latter, mind writing a commit message for it? > > Not sure if I'm using "fixup" correctly in the subject, but this is > meant to be squashed onto the tip of jt/http-auth-proto-v2-fix - > specifically, deb7d2094a ("remote-curl: use post_rpc() for protocol v2 > also", 2019-02-14). Saying "Fixup on tip of" to mean that you are fixing the 5th one in a 5-patch series is sufficient to convey what you want between humans, but that does not help the machine to help humans reduce mistakes. It would have been even more helpful if you created this commit with git commit --fixup 0cdb2a12ad which would have produced something like the attached patch, and that would have allowed me to do git checkout jt/http-auth-proto-v2-fix git am ./+jt-http-auth-proto-v2-fix-fixup git rebase -i --autosquash HEAD~5 or somesuch. Thanks, will queue. -- >8 -- Subject: [PATCH] fixup! remote-curl: use post_rpc() for protocol v2 also Signed-off-by: Jonathan Tan <jonathantanmy@xxxxxxxxxx> --- remote-curl.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/remote-curl.c b/remote-curl.c index 8c03c78fc6..3c3872cca6 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -758,7 +758,11 @@ static curl_off_t xcurl_off_t(size_t len) return (curl_off_t)size; } -static int post_rpc(struct rpc_state *rpc) +/* + * If flush_received is true, do not attempt to read any more; just use what's + * in rpc->buf. + */ +static int post_rpc(struct rpc_state *rpc, int flush_received) { struct active_request_slot *slot; struct curl_slist *headers = http_copy_default_headers(); @@ -773,17 +777,19 @@ static int post_rpc(struct rpc_state *rpc) * allocated buffer space we can use HTTP/1.0 and avoid the * chunked encoding mess. */ - while (1) { - size_t n; - enum packet_read_status status; - - if (!rpc_read_from_out(rpc, 0, &n, &status)) { - large_request = 1; - use_gzip = 0; - break; + if (!flush_received) { + while (1) { + size_t n; + enum packet_read_status status; + + if (!rpc_read_from_out(rpc, 0, &n, &status)) { + large_request = 1; + use_gzip = 0; + break; + } + if (status == PACKET_READ_FLUSH) + break; } - if (status == PACKET_READ_FLUSH) - break; } if (large_request) { @@ -963,7 +969,7 @@ static int rpc_service(struct rpc_state *rpc, struct discovery *heads, break; rpc->pos = 0; rpc->len = n; - err |= post_rpc(rpc); + err |= post_rpc(rpc, 0); } close(client.in); @@ -1319,7 +1325,7 @@ static int stateless_connect(const char *service_name) BUG("The entire rpc->buf should be larger than LARGE_PACKET_MAX"); if (status == PACKET_READ_EOF) break; - if (post_rpc(&rpc)) + if (post_rpc(&rpc, status == PACKET_READ_FLUSH)) /* We would have an err here */ break; /* Reset the buffer for next request */ -- 2.21.0