summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2020-04-07 18:16:01 +0200
committerDaniel Stenberg <daniel@haxx.se>2020-04-08 08:14:23 +0200
commit0ef54abf52086e48e7c751747650584d51b9ebaa (patch)
treedff9d2e74f60d84658306727c091f876246baa52
parent3e376059bbc6e5e56013c383f3ae3eef6c3ae8bb (diff)
downloadcurl-0ef54abf52086e48e7c751747650584d51b9ebaa.tar.gz
http: don't consider upload done if the request isn't completely sent off
Fixes #4919 Closes #5197
-rw-r--r--lib/http.c2
-rw-r--r--lib/transfer.c9
2 files changed, 8 insertions, 3 deletions
diff --git a/lib/http.c b/lib/http.c
index e53f0d482..5a2edf09e 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -3057,7 +3057,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
}
if(result)
return result;
- if(!postsize)
+ if(!postsize && (http->sending != HTTPSEND_REQUEST))
data->req.upload_done = TRUE;
if(data->req.writebytecount) {
diff --git a/lib/transfer.c b/lib/transfer.c
index 27c984f8f..d5eb2c327 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -1837,15 +1837,21 @@ Curl_setup_transfer(
{
struct SingleRequest *k = &data->req;
struct connectdata *conn = data->conn;
+ struct HTTP *http = data->req.protop;
+ bool httpsending = ((conn->handler->protocol&PROTO_FAMILY_HTTP) &&
+ (http->sending == HTTPSEND_REQUEST));
DEBUGASSERT(conn != NULL);
DEBUGASSERT((sockindex <= 1) && (sockindex >= -1));
- if(conn->bits.multiplex || conn->httpversion == 20) {
+ if(conn->bits.multiplex || conn->httpversion == 20 || httpsending) {
/* when multiplexing, the read/write sockets need to be the same! */
conn->sockfd = sockindex == -1 ?
((writesockindex == -1 ? CURL_SOCKET_BAD : conn->sock[writesockindex])) :
conn->sock[sockindex];
conn->writesockfd = conn->sockfd;
+ if(httpsending)
+ /* special and very HTTP-specific */
+ writesockindex = FIRSTSOCKET;
}
else {
conn->sockfd = sockindex == -1 ?
@@ -1873,7 +1879,6 @@ Curl_setup_transfer(
k->keepon |= KEEP_RECV;
if(writesockindex != -1) {
- struct HTTP *http = data->req.protop;
/* HTTP 1.1 magic:
Even if we require a 100-return code before uploading data, we might