diff options
-rw-r--r-- | src/event/quic/ngx_event_quic.c | 4 | ||||
-rw-r--r-- | src/event/quic/ngx_event_quic_ack.c | 1 | ||||
-rw-r--r-- | src/event/quic/ngx_event_quic_streams.c | 18 |
3 files changed, 16 insertions, 7 deletions
diff --git a/src/event/quic/ngx_event_quic.c b/src/event/quic/ngx_event_quic.c index b4033bc3f..b559c485d 100644 --- a/src/event/quic/ngx_event_quic.c +++ b/src/event/quic/ngx_event_quic.c @@ -844,7 +844,7 @@ ngx_quic_handle_packet(ngx_connection_t *c, ngx_quic_conf_t *conf, "quic stateless reset packet detected"); qc->draining = 1; - ngx_quic_close_connection(c, NGX_OK); + ngx_post_event(&qc->close, &ngx_posted_events); return NGX_OK; } @@ -1390,7 +1390,7 @@ ngx_quic_handle_frames(ngx_connection_t *c, ngx_quic_header_t *pkt) if (do_close) { qc->draining = 1; - ngx_quic_close_connection(c, NGX_OK); + ngx_post_event(&qc->close, &ngx_posted_events); } if (pkt->path != qc->path && nonprobing) { diff --git a/src/event/quic/ngx_event_quic_ack.c b/src/event/quic/ngx_event_quic_ack.c index 062b065f9..21ee888c9 100644 --- a/src/event/quic/ngx_event_quic_ack.c +++ b/src/event/quic/ngx_event_quic_ack.c @@ -806,6 +806,7 @@ void ngx_quic_lost_handler(ngx_event_t *ev) if (ngx_quic_detect_lost(c, NULL) != NGX_OK) { ngx_quic_close_connection(c, NGX_ERROR); + return; } ngx_quic_connstate_dbg(c); diff --git a/src/event/quic/ngx_event_quic_streams.c b/src/event/quic/ngx_event_quic_streams.c index 6664dfd7b..b4b0eda05 100644 --- a/src/event/quic/ngx_event_quic_streams.c +++ b/src/event/quic/ngx_event_quic_streams.c @@ -1084,7 +1084,8 @@ ngx_quic_stream_cleanup_handler(void *data) { ngx_connection_t *c = data; - ngx_quic_stream_t *qs; + ngx_quic_stream_t *qs; + ngx_quic_connection_t *qc; qs = c->quic; @@ -1092,16 +1093,23 @@ ngx_quic_stream_cleanup_handler(void *data) "quic stream id:0x%xL cleanup", qs->id); if (ngx_quic_shutdown_stream(c, NGX_RDWR_SHUTDOWN) != NGX_OK) { - ngx_quic_close_connection(c, NGX_ERROR); - return; + goto failed; } qs->connection = NULL; if (ngx_quic_close_stream(qs) != NGX_OK) { - ngx_quic_close_connection(c, NGX_ERROR); - return; + goto failed; } + + return; + +failed: + + qc = ngx_quic_get_connection(qs->parent); + qc->error = NGX_QUIC_ERR_INTERNAL_ERROR; + + ngx_post_event(&qc->close, &ngx_posted_events); } |