diff options
author | Vladimir Homutov <vl@nginx.com> | 2018-11-07 13:22:14 +0300 |
---|---|---|
committer | Vladimir Homutov <vl@nginx.com> | 2018-11-07 13:22:14 +0300 |
commit | 7e3041b79f5b4ae90c1b61c4489f24c2b4d5efc7 (patch) | |
tree | 759577d471f312fb8e74785e286156eaf20cf545 /src | |
parent | 6351d8306f3c78746798e4e4cfce23936e097fb7 (diff) | |
download | nginx-7e3041b79f5b4ae90c1b61c4489f24c2b4d5efc7.tar.gz nginx-7e3041b79f5b4ae90c1b61c4489f24c2b4d5efc7.zip |
Stream: fixed possible use of a freed connection.
The session handler may result in session termination, thus a connection
pool (from which c->udp was allocated) may be destroyed.
Diffstat (limited to 'src')
-rw-r--r-- | src/event/ngx_event_udp.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/event/ngx_event_udp.c b/src/event/ngx_event_udp.c index 8b0ae5539..53b090475 100644 --- a/src/event/ngx_event_udp.c +++ b/src/event/ngx_event_udp.c @@ -261,7 +261,10 @@ ngx_event_recvmsg(ngx_event_t *ev) rev->handler(rev); - c->udp->buffer = NULL; + if (c->udp) { + c->udp->buffer = NULL; + } + rev->ready = 0; goto next; @@ -561,6 +564,8 @@ ngx_delete_udp_connection(void *data) ngx_connection_t *c = data; ngx_rbtree_delete(&c->listening->rbtree, &c->udp->node); + + c->udp = NULL; } |