aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2021-09-06 16:59:00 +0300
committerRoman Arutyunyan <arut@nginx.com>2021-09-06 16:59:00 +0300
commit465362e0664a4fe31cb5df8e757bc99b3c68f5fa (patch)
tree027033671c15f503558322d00bf4aaab38f2bd13 /src
parent9985ab86bf0eb3a58f26d0396c1828d4a70faf03 (diff)
downloadnginx-465362e0664a4fe31cb5df8e757bc99b3c68f5fa.tar.gz
nginx-465362e0664a4fe31cb5df8e757bc99b3c68f5fa.zip
QUIC: store QUIC connection fd in stream fake connection.
Previously it had -1 as fd. This fixes proxying, which relies on downstream connection having a real fd. Also, this reduces diff to the default branch for ngx_close_connection().
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_connection.c12
-rw-r--r--src/event/quic/ngx_event_quic_streams.c2
2 files changed, 8 insertions, 6 deletions
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index 974f48c9a..4a7d2fe79 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -1185,6 +1185,11 @@ ngx_close_connection(ngx_connection_t *c)
ngx_uint_t log_error, level;
ngx_socket_t fd;
+ if (c->fd == (ngx_socket_t) -1) {
+ ngx_log_error(NGX_LOG_ALERT, c->log, 0, "connection already closed");
+ return;
+ }
+
if (c->read->timer_set) {
ngx_del_timer(c->read);
}
@@ -1193,7 +1198,7 @@ ngx_close_connection(ngx_connection_t *c)
ngx_del_timer(c->write);
}
- if (!c->shared && c->fd != (ngx_socket_t) -1) {
+ if (!c->shared) {
if (ngx_del_conn) {
ngx_del_conn(c, NGX_CLOSE_EVENT);
@@ -1225,11 +1230,6 @@ ngx_close_connection(ngx_connection_t *c)
ngx_free_connection(c);
- if (c->fd == (ngx_socket_t) -1) {
- ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0, "connection has no fd");
- return;
- }
-
fd = c->fd;
c->fd = (ngx_socket_t) -1;
diff --git a/src/event/quic/ngx_event_quic_streams.c b/src/event/quic/ngx_event_quic_streams.c
index ef8a9df47..a4f4cb57c 100644
--- a/src/event/quic/ngx_event_quic_streams.c
+++ b/src/event/quic/ngx_event_quic_streams.c
@@ -440,6 +440,8 @@ ngx_quic_create_stream(ngx_connection_t *c, uint64_t id)
qs->connection = sc;
sc->quic = qs;
+ sc->fd = c->fd;
+ sc->shared = 1;
sc->type = SOCK_STREAM;
sc->pool = pool;
sc->ssl = c->ssl;