mirror of
https://github.com/moparisthebest/curl
synced 2024-11-05 00:55:04 -05:00
http2: keep trying to send pending frames after req.upload_done
Fixes #1410 Closes #5401
This commit is contained in:
parent
cac5374298
commit
34a5400de1
22
lib/http2.c
22
lib/http2.c
@ -1346,10 +1346,11 @@ CURLcode Curl_http2_done_sending(struct connectdata *conn)
|
||||
|
||||
struct HTTP *stream = conn->data->req.protop;
|
||||
|
||||
struct http_conn *httpc = &conn->proto.httpc;
|
||||
nghttp2_session *h2 = httpc->h2;
|
||||
|
||||
if(stream->upload_left) {
|
||||
/* If the stream still thinks there's data left to upload. */
|
||||
struct http_conn *httpc = &conn->proto.httpc;
|
||||
nghttp2_session *h2 = httpc->h2;
|
||||
|
||||
stream->upload_left = 0; /* DONE! */
|
||||
|
||||
@ -1359,6 +1360,23 @@ CURLcode Curl_http2_done_sending(struct connectdata *conn)
|
||||
|
||||
(void)h2_process_pending_input(conn, httpc, &result);
|
||||
}
|
||||
|
||||
/* If nghttp2 still has pending frames unsent */
|
||||
if(nghttp2_session_want_write(h2)) {
|
||||
struct Curl_easy *data = conn->data;
|
||||
struct SingleRequest *k = &data->req;
|
||||
int rv;
|
||||
|
||||
H2BUGF(infof(data, "HTTP/2 still wants to send data (easy %p)\n", data));
|
||||
|
||||
/* re-set KEEP_SEND to make sure we are called again */
|
||||
k->keepon |= KEEP_SEND;
|
||||
|
||||
/* and attempt to send the pending frames */
|
||||
rv = h2_session_send(data, h2);
|
||||
if(rv != 0)
|
||||
result = CURLE_SEND_ERROR;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user