mirror of
https://github.com/curl/curl.git
synced 2025-04-18 16:30:45 +08:00
ngtcp2: do not iterate over multi handles
There was on place left iterating over `multi->process` list which was unnecessary. Remove that. Closes #16606
This commit is contained in:
parent
1503555836
commit
0d1e43af8d
@ -297,38 +297,6 @@ static void h3_data_done(struct Curl_cfilter *cf, struct Curl_easy *data)
|
||||
}
|
||||
}
|
||||
|
||||
static struct Curl_easy *get_stream_easy(struct Curl_cfilter *cf,
|
||||
struct Curl_easy *data,
|
||||
int64_t stream_id,
|
||||
struct h3_stream_ctx **pstream)
|
||||
{
|
||||
struct cf_ngtcp2_ctx *ctx = cf->ctx;
|
||||
struct h3_stream_ctx *stream;
|
||||
|
||||
(void)cf;
|
||||
stream = H3_STREAM_CTX(ctx, data);
|
||||
if(stream && stream->id == stream_id) {
|
||||
*pstream = stream;
|
||||
return data;
|
||||
}
|
||||
else {
|
||||
struct Curl_llist_node *e;
|
||||
DEBUGASSERT(data->multi);
|
||||
for(e = Curl_llist_head(&data->multi->process); e; e = Curl_node_next(e)) {
|
||||
struct Curl_easy *sdata = Curl_node_elem(e);
|
||||
if(sdata->conn != data->conn)
|
||||
continue;
|
||||
stream = H3_STREAM_CTX(ctx, sdata);
|
||||
if(stream && stream->id == stream_id) {
|
||||
*pstream = stream;
|
||||
return sdata;
|
||||
}
|
||||
}
|
||||
}
|
||||
*pstream = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void h3_drain_stream(struct Curl_cfilter *cf,
|
||||
struct Curl_easy *data)
|
||||
{
|
||||
@ -710,28 +678,26 @@ static int cb_extend_max_local_streams_bidi(ngtcp2_conn *tconn,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cb_extend_max_stream_data(ngtcp2_conn *tconn, int64_t sid,
|
||||
static int cb_extend_max_stream_data(ngtcp2_conn *tconn, int64_t stream_id,
|
||||
uint64_t max_data, void *user_data,
|
||||
void *stream_user_data)
|
||||
{
|
||||
struct Curl_cfilter *cf = user_data;
|
||||
struct cf_ngtcp2_ctx *ctx = cf->ctx;
|
||||
curl_int64_t stream_id = (curl_int64_t)sid;
|
||||
struct Curl_easy *data = CF_DATA_CURRENT(cf);
|
||||
struct Curl_easy *s_data;
|
||||
struct Curl_easy *s_data = stream_user_data;
|
||||
struct h3_stream_ctx *stream;
|
||||
int rv;
|
||||
(void)tconn;
|
||||
(void)max_data;
|
||||
(void)stream_user_data;
|
||||
|
||||
rv = nghttp3_conn_unblock_stream(ctx->h3conn, stream_id);
|
||||
if(rv && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) {
|
||||
return NGTCP2_ERR_CALLBACK_FAILURE;
|
||||
}
|
||||
s_data = get_stream_easy(cf, data, stream_id, &stream);
|
||||
if(s_data && stream && stream->quic_flow_blocked) {
|
||||
CURL_TRC_CF(s_data, cf, "[%" FMT_PRId64 "] unblock quic flow", stream_id);
|
||||
stream = H3_STREAM_CTX(ctx, s_data);
|
||||
if(stream && stream->quic_flow_blocked) {
|
||||
CURL_TRC_CF(s_data, cf, "[%" FMT_PRId64 "] unblock quic flow",
|
||||
(curl_int64_t)stream_id);
|
||||
stream->quic_flow_blocked = FALSE;
|
||||
h3_drain_stream(cf, s_data);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user