http3: expire unpaused transfers in all HTTP/3 backends

Closes #11005
This commit is contained in:
Stefan Eissing 2023-04-24 13:28:12 +02:00 committed by Daniel Stenberg
parent 5622e431ed
commit 3b7a8a25b6
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
3 changed files with 46 additions and 0 deletions

View File

@ -739,6 +739,17 @@ static void cf_msh3_active(struct Curl_cfilter *cf, struct Curl_easy *data)
ctx->active = TRUE;
}
static CURLcode h3_data_pause(struct Curl_cfilter *cf,
struct Curl_easy *data,
bool pause)
{
if(!pause) {
drain_stream(cf, data);
Curl_expire(data, 0, EXPIRE_RUN_NOW);
}
return CURLE_OK;
}
static CURLcode cf_msh3_data_event(struct Curl_cfilter *cf,
struct Curl_easy *data,
int event, int arg1, void *arg2)
@ -755,6 +766,9 @@ static CURLcode cf_msh3_data_event(struct Curl_cfilter *cf,
case CF_CTRL_DATA_SETUP:
result = h3_data_setup(cf, data);
break;
case CF_CTRL_DATA_PAUSE:
result = h3_data_pause(cf, data, (arg1 != 0));
break;
case CF_CTRL_DATA_DONE:
h3_data_done(cf, data);
break;

View File

@ -2096,6 +2096,19 @@ static bool cf_ngtcp2_data_pending(struct Curl_cfilter *cf,
return stream && !Curl_bufq_is_empty(&stream->recvbuf);
}
static CURLcode h3_data_pause(struct Curl_cfilter *cf,
struct Curl_easy *data,
bool pause)
{
/* TODO: there seems right now no API in ngtcp2 to shrink/enlarge
* the streams windows. As we do in HTTP/2. */
if(!pause) {
drain_stream(cf, data);
Curl_expire(data, 0, EXPIRE_RUN_NOW);
}
return CURLE_OK;
}
static CURLcode cf_ngtcp2_data_event(struct Curl_cfilter *cf,
struct Curl_easy *data,
int event, int arg1, void *arg2)
@ -2110,6 +2123,9 @@ static CURLcode cf_ngtcp2_data_event(struct Curl_cfilter *cf,
switch(event) {
case CF_CTRL_DATA_SETUP:
break;
case CF_CTRL_DATA_PAUSE:
result = h3_data_pause(cf, data, (arg1 != 0));
break;
case CF_CTRL_DATA_DONE: {
h3_data_done(cf, data);
break;

View File

@ -1114,6 +1114,19 @@ static bool cf_quiche_data_pending(struct Curl_cfilter *cf,
return stream && !Curl_bufq_is_empty(&stream->recvbuf);
}
static CURLcode h3_data_pause(struct Curl_cfilter *cf,
struct Curl_easy *data,
bool pause)
{
/* TODO: there seems right now no API in quiche to shrink/enlarge
* the streams windows. As we do in HTTP/2. */
if(!pause) {
drain_stream(cf, data);
Curl_expire(data, 0, EXPIRE_RUN_NOW);
}
return CURLE_OK;
}
static CURLcode cf_quiche_data_event(struct Curl_cfilter *cf,
struct Curl_easy *data,
int event, int arg1, void *arg2)
@ -1127,6 +1140,9 @@ static CURLcode cf_quiche_data_event(struct Curl_cfilter *cf,
result = h3_data_setup(cf, data);
break;
}
case CF_CTRL_DATA_PAUSE:
result = h3_data_pause(cf, data, (arg1 != 0));
break;
case CF_CTRL_DATA_DONE: {
h3_data_done(cf, data);
break;