<div dir="ltr"><div dir="ltr"><div dir="ltr"><div># HG changeset patch<br></div><div># User 乔志奇@Matebook-Qiao <<a href="mailto:qiaozhiqi2016@gmail.com">qiaozhiqi2016@gmail.com</a>></div><div># Date 1671515941 -28800</div><div>#      Tue Dec 20 13:59:01 2022 +0800</div><div># Branch nginx-bugfix-websocket</div><div># Node ID 3e68435db4a9991921b5bf91d792787a1ad387fb</div><div># Parent  3108d4d668e4b907868b815f0441d4c893bf4188</div><div>Fixed state protection when restarting during the websocket request process</div><div><br></div><div>During the websocket request process, it is necessary to add a timer operation, but we need to do state protection for the timer addition operation. When the nginx process is restarted or stopped, the timer should be prohibited from being added, otherwise continuous websocket requests will cause the old process to be unable to exit during the restart process or unable to exit during the stop process.<br></div><div><br></div><div>diff -r 3108d4d668e4 -r 3e68435db4a9 src/http/ngx_http_upstream.c</div><div>--- a/src/http/ngx_http_upstream.c      Fri Dec 16 01:15:15 2022 +0400</div><div>+++ b/src/http/ngx_http_upstream.c      Tue Dec 20 13:59:01 2022 +0800</div><div>@@ -3559,7 +3559,9 @@</div><div>     }</div><div><br></div><div>     if (upstream->write->active && !upstream->write->ready) {</div><div>-        ngx_add_timer(upstream->write, u->conf->send_timeout);</div><div>+        if (!ngx_exiting && !ngx_quit) {</div><div>+            ngx_add_timer(upstream->write, u->conf->send_timeout);</div><div>+        }</div><div><br></div><div>     } else if (upstream->write->timer_set) {</div><div>         ngx_del_timer(upstream->write);</div><div>@@ -3578,7 +3580,9 @@</div><div>     }</div><div><br></div><div>     if (upstream->read->active && !upstream->read->ready) {</div><div>-        ngx_add_timer(upstream->read, u->conf->read_timeout);</div><div>+        if (!ngx_exiting && !ngx_quit) {</div><div>+            ngx_add_timer(upstream->read, u->conf->read_timeout);</div><div>+        }</div><div><br></div><div>     } else if (upstream->read->timer_set) {</div><div>         ngx_del_timer(upstream->read);</div><div>@@ -3604,7 +3608,9 @@</div><div>     }</div><div><br></div><div>     if (downstream->write->active && !downstream->write->ready) {</div><div>-        ngx_add_timer(downstream->write, clcf->send_timeout);</div><div>+        if (!ngx_exiting && !ngx_quit) {</div><div>+            ngx_add_timer(downstream->write, clcf->send_timeout);</div><div>+        }</div><div><br></div><div>     } else if (downstream->write->timer_set) {</div><div>         ngx_del_timer(downstream->write);</div><div><br></div></div></div></div>