# HG changeset patch
# User Sergey Kandaurov <pluknet@nginx.com>
# Date 1673875616 -14400
# Mon Jan 16 17:26:56 2023 +0400
# Branch quic
# Node ID f7c7cabe232898db5b16a142163de71964cebcfd
# Parent 6bb884dc72916dc675df65d02abee0c9cfabc916
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 in ngx_quic_set_event()
e.g., as part of handling a STREAM frame.
diff --git a/src/event/quic/ngx_event_quic_streams.c b/src/event/quic/ngx_event_quic_streams.c
--- a/src/event/quic/ngx_event_quic_streams.c
+++ b/src/event/quic/ngx_event_quic_streams.c
@@ -106,6 +106,13 @@ ngx_quic_open_stream(ngx_connection_t *c
return NULL;
}
+ nqs->connection->write->active = 1;
+ nqs->connection->write->ready = 1;
+
+ if (!bidi) {
+ nqs->connection->read->active = 1;
+ }
+
return nqs->connection;
}
@@ -534,6 +541,13 @@ ngx_quic_init_stream_handler(ngx_event_t
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 +718,6 @@ ngx_quic_create_stream(ngx_connection_t
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;
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-devel