要約
- stream モジュールのバグ修正。
コミットログ (changeset)
http://hg.nginx.org/nginx/rev/ee3645078759
ソケット読み込みエラーが起きたときに無限ループに陥ってしまうバグがあったらしく、if文の条件に !src->read->error
を追加して回避している。
changeset: 6868:ee3645078759
user: Vladimir Homutov <vl@nginx.com>
date: Wed Jan 11 12:01:56 2017 +0300
summary: Stream: avoid infinite loop in case of socket read error.
src/stream/ngx_stream_proxy_module.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff -r 8c4d07ef08f5 -r ee3645078759 src/stream/ngx_stream_proxy_module.c
--- a/src/stream/ngx_stream_proxy_module.c Tue Jan 10 17:13:06 2017 +0300
+++ b/src/stream/ngx_stream_proxy_module.c Wed Jan 11 12:01:56 2017 +0300
@@ -1534,8 +1534,9 @@
size = b->end - b->last;
- if (size && src->read->ready && !src->read->delayed) {
-
+ if (size && src->read->ready && !src->read->delayed
+ && !src->read->error)
+ {
if (limit_rate) {
limit = (off_t) limit_rate * (ngx_time() - u->start_sec + 1)
- *received;
src
はngx_connection_t型の変数で、 src->read
はイベントループに追加されるngx_event_t型の変数である。src->read->ready
と src->read->error
はそれぞれunsigned integer。
struct ngx_event_s {
...
/* the ready event; in aio mode 0 means that no operation can be posted */
unsigned ready:1;
...
unsigned error:1;
...
};
src->read->ready
だが src->read->error
になるケースがあまり具体的に想像できなかったので、そこは宿題とする。