changeset 7391:27559d4a5151

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.
author Vladimir Homutov <vl@nginx.com>
date Wed, 07 Nov 2018 13:22:14 +0300
parents 2e7c4c3b0644
children 04ff25798002
files src/event/ngx_event_udp.c
diffstat 1 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }