> The main quic connection is created in ngx_quic_new_connection(), which
> calls ngx_quic_open_sockets() and it sets c->udp for the first time.

> When packet arrives, c->udp is updated by ngx_lookup_udp_connection().

> The main connection does not have c->quic set; this is used in stream
> connections. To access main connection from quic stream, c->quic->parent
> may be used.

ngx_event_recvmsg->(ls->handler) ngx_http_init_connection->ngx_http_v3_init:
    if (c->quic == NULL) {
        h3scf->quic.timeout = clcf->keepalive_timeout;
        ngx_quic_run(c, &h3scf->quic);
        return;
}

And, why check c->quic == NULL, as it is never set
c->read->handler = ngx_quic_input_handler; in ngx_quic_run.
ngx_quic_close_connection  maybe called in ngx_quic_input_handler, and it 
finally call ngx_ssl_shutdown(c), which cannot return immediately as c->quic is 
never set.
And maybe ngx_handle_read_event add c->read to events group finally

Gao,Yan(ACG VCP)

发件人: "Gao,Yan(媒体云)" <gaoya...@baidu.com>
日期: 2022年1月26日 星期三 下午6:00
收件人: "nginx-devel@nginx.org" <nginx-devel@nginx.org>
主题: Re: [quic] ngx_quic_input_handler Segmentation fault because c->udp->dgram 
is null

> the case you are describing is not what see in backtrace. And in
> described case connection is main quic connection which has process
> c->quic pointer set.

I only find sc->quic = qs; in ngx_quic_create_stream,and this is stream 
connection, not the main quic connection.
How the main quic connection c->quic set?

And the local code at this position:
changeset:   8813:c37ea624c307
branch:      quic
tag:         tip
user:        Roman Arutyunyan <a...@nginx.com>
date:        Fri Jan 21 11:20:18 2022 +0300
summary:     QUIC: changed debug message.

Gao,Yan(ACG VCP)

_______________________________________________
nginx-devel mailing list -- nginx-devel@nginx.org
To unsubscribe send an email to nginx-devel-le...@nginx.org

Reply via email to