mirror of
https://github.com/nginx/nginx.git
synced 2026-05-28 04:12:47 -04:00
QUIC: defer setting the active flag for client stream events.
Specifically, now it is kept unset until streams are initialized. Notably, this unbreaks OCSP with client certificates after 35e27117b593. Previously, the read event could be posted prematurely via ngx_quic_set_event() e.g., as part of handling a STREAM frame.
This commit is contained in:
parent
d76600874c
commit
b196429fbe
1 changed files with 21 additions and 18 deletions
|
|
@ -46,8 +46,8 @@ ngx_connection_t *
|
|||
ngx_quic_open_stream(ngx_connection_t *c, ngx_uint_t bidi)
|
||||
{
|
||||
uint64_t id;
|
||||
ngx_connection_t *pc;
|
||||
ngx_quic_stream_t *nqs;
|
||||
ngx_connection_t *pc, *sc;
|
||||
ngx_quic_stream_t *qs;
|
||||
ngx_quic_connection_t *qc;
|
||||
|
||||
pc = c->quic ? c->quic->parent : c;
|
||||
|
|
@ -101,12 +101,21 @@ ngx_quic_open_stream(ngx_connection_t *c, ngx_uint_t bidi)
|
|||
qc->streams.server_streams_uni++;
|
||||
}
|
||||
|
||||
nqs = ngx_quic_create_stream(pc, id);
|
||||
if (nqs == NULL) {
|
||||
qs = ngx_quic_create_stream(pc, id);
|
||||
if (qs == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return nqs->connection;
|
||||
sc = qs->connection;
|
||||
|
||||
sc->write->active = 1;
|
||||
sc->write->ready = 1;
|
||||
|
||||
if (bidi) {
|
||||
sc->read->active = 1;
|
||||
}
|
||||
|
||||
return sc;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -534,6 +543,13 @@ ngx_quic_init_stream_handler(ngx_event_t *ev)
|
|||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, "quic init stream");
|
||||
|
||||
if ((qs->id & NGX_QUIC_STREAM_UNIDIRECTIONAL) == 0) {
|
||||
c->write->active = 1;
|
||||
c->write->ready = 1;
|
||||
}
|
||||
|
||||
c->read->active = 1;
|
||||
|
||||
ngx_queue_remove(&qs->queue);
|
||||
|
||||
c->listening->handler(c);
|
||||
|
|
@ -704,19 +720,6 @@ ngx_quic_create_stream(ngx_connection_t *c, uint64_t id)
|
|||
|
||||
log->connection = sc->number;
|
||||
|
||||
if ((id & NGX_QUIC_STREAM_UNIDIRECTIONAL) == 0
|
||||
|| (id & NGX_QUIC_STREAM_SERVER_INITIATED))
|
||||
{
|
||||
sc->write->active = 1;
|
||||
sc->write->ready = 1;
|
||||
}
|
||||
|
||||
if ((id & NGX_QUIC_STREAM_UNIDIRECTIONAL) == 0
|
||||
|| (id & NGX_QUIC_STREAM_SERVER_INITIATED) == 0)
|
||||
{
|
||||
sc->read->active = 1;
|
||||
}
|
||||
|
||||
if (id & NGX_QUIC_STREAM_UNIDIRECTIONAL) {
|
||||
if (id & NGX_QUIC_STREAM_SERVER_INITIATED) {
|
||||
qs->send_max_data = qc->ctp.initial_max_stream_data_uni;
|
||||
|
|
|
|||
Loading…
Reference in a new issue