QUIC: asynchronous shutdown.
Previously, when cleaning up a QUIC stream in shutdown mode, ngx_quic_shutdown_quic() was called, which could close the QUIC connection right away. This could be a problem if the connection was referenced up the stack. For example, this could happen in ngx_quic_init_streams(), ngx_quic_close_streams(), ngx_quic_create_client_stream() etc. With a typical HTTP/3 client the issue is unlikely because of HTTP/3 uni streams which need a posted event to close. In this case QUIC connection cannot be closed right away. Now QUIC connection read event is posted and it will shut down the connection asynchronously.
This commit is contained in:
parent
4d7ce86ff5
commit
923de21472
2 changed files with 5 additions and 1 deletions
|
@ -421,7 +421,11 @@ ngx_quic_input_handler(ngx_event_t *rev)
|
||||||
if (!rev->ready) {
|
if (!rev->ready) {
|
||||||
if (qc->closing) {
|
if (qc->closing) {
|
||||||
ngx_quic_close_connection(c, NGX_OK);
|
ngx_quic_close_connection(c, NGX_OK);
|
||||||
|
|
||||||
|
} else if (qc->shutdown) {
|
||||||
|
ngx_quic_shutdown_quic(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -849,7 +849,7 @@ done:
|
||||||
(void) ngx_quic_output(pc);
|
(void) ngx_quic_output(pc);
|
||||||
|
|
||||||
if (qc->shutdown) {
|
if (qc->shutdown) {
|
||||||
ngx_quic_shutdown_quic(pc);
|
ngx_post_event(pc->read, &ngx_posted_events);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue