diff options
author | Roman Arutyunyan <arut@nginx.com> | 2021-05-26 13:07:06 +0300 |
---|---|---|
committer | Roman Arutyunyan <arut@nginx.com> | 2021-05-26 13:07:06 +0300 |
commit | 27a24f4c6ba2defcbe04f447c827b4e6617b3603 (patch) | |
tree | 180b74c0f78d5b0d9ded3f9de0511fc2f600c154 /src | |
parent | 1677503f98ca577745f95508bf73dbbaf36c4b21 (diff) | |
download | nginx-27a24f4c6ba2defcbe04f447c827b4e6617b3603.tar.gz nginx-27a24f4c6ba2defcbe04f447c827b4e6617b3603.zip |
QUIC: call stream read handler on new data arrival.
This was broken in b3f6ad181df4.
Diffstat (limited to 'src')
-rw-r--r-- | src/event/quic/ngx_event_quic_streams.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/event/quic/ngx_event_quic_streams.c b/src/event/quic/ngx_event_quic_streams.c index d63938192..192300e09 100644 --- a/src/event/quic/ngx_event_quic_streams.c +++ b/src/event/quic/ngx_event_quic_streams.c @@ -814,6 +814,7 @@ ngx_quic_handle_stream_frame(ngx_connection_t *c, ngx_quic_header_t *pkt, { uint64_t last; ngx_pool_t *pool; + ngx_event_t *rev; ngx_connection_t *sc; ngx_quic_stream_t *qs; ngx_quic_connection_t *qc; @@ -895,9 +896,7 @@ ngx_quic_handle_stream_frame(ngx_connection_t *c, ngx_quic_header_t *pkt, f->offset = qs->recv_offset; } - if (f->offset == qs->recv_offset) { - qs->connection->read->ready = 1; - } + rev = qs->connection->read; if (f->fin) { if (qs->final_size != (uint64_t) -1 && qs->final_size != last) { @@ -910,12 +909,26 @@ ngx_quic_handle_stream_frame(ngx_connection_t *c, ngx_quic_header_t *pkt, return NGX_ERROR; } - qs->connection->read->pending_eof = 1; + rev->pending_eof = 1; qs->final_size = last; } - return ngx_quic_order_bufs(c, &qs->in, frame->data, - f->offset - qs->recv_offset); + if (ngx_quic_order_bufs(c, &qs->in, frame->data, + f->offset - qs->recv_offset) + != NGX_OK) + { + return NGX_ERROR; + } + + if (f->offset == qs->recv_offset) { + rev->ready = 1; + + if (rev->active) { + rev->handler(rev); + } + } + + return NGX_OK; cleanup: |