[nginx] Upstream: simplified u->state->status handling.
Maxim Dounin
mdounin at mdounin.ru
Mon Aug 18 00:30:23 UTC 2025
details: http://freenginx.org/hg/nginx/rev/63b1cef59427
branches:
changeset: 9402:63b1cef59427
user: Maxim Dounin <mdounin at mdounin.ru>
date: Mon Aug 18 03:18:37 2025 +0300
description:
Upstream: simplified u->state->status handling.
Instead of assigning u->state->status when parsing a status line, and
then overwriting it if an error happens, we now assign u->state->status
after all input headers are parsed.
This simplifies the code, and also avoids additional checks needed to
handle parsing the headers from cache. It is also simplifies upcoming
changes to handle 1xx interim responses.
diffstat:
src/http/modules/ngx_http_fastcgi_module.c | 4 ----
src/http/modules/ngx_http_grpc_module.c | 4 ----
src/http/modules/ngx_http_memcached_module.c | 2 --
src/http/modules/ngx_http_proxy_module.c | 8 --------
src/http/modules/ngx_http_scgi_module.c | 8 --------
src/http/modules/ngx_http_uwsgi_module.c | 8 --------
src/http/ngx_http_upstream.c | 1 +
7 files changed, 1 insertions(+), 34 deletions(-)
diffs (129 lines):
diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -2063,10 +2063,6 @@ ngx_http_fastcgi_process_header(ngx_http
ngx_str_set(&u->headers_in.status_line, "200 OK");
}
- if (u->state && u->state->status == 0) {
- u->state->status = u->headers_in.status_n;
- }
-
break;
}
diff --git a/src/http/modules/ngx_http_grpc_module.c b/src/http/modules/ngx_http_grpc_module.c
--- a/src/http/modules/ngx_http_grpc_module.c
+++ b/src/http/modules/ngx_http_grpc_module.c
@@ -1867,10 +1867,6 @@ ngx_http_grpc_process_header(ngx_http_re
u->headers_in.status_n = status;
- if (u->state && u->state->status == 0) {
- u->state->status = status;
- }
-
ctx->status = 1;
continue;
diff --git a/src/http/modules/ngx_http_memcached_module.c b/src/http/modules/ngx_http_memcached_module.c
--- a/src/http/modules/ngx_http_memcached_module.c
+++ b/src/http/modules/ngx_http_memcached_module.c
@@ -422,7 +422,6 @@ found:
}
u->headers_in.status_n = 200;
- u->state->status = 200;
u->buffer.pos = p + sizeof(CRLF) - 1;
return NGX_OK;
@@ -434,7 +433,6 @@ found:
u->headers_in.content_length_n = 0;
u->headers_in.status_n = 404;
- u->state->status = 404;
u->buffer.pos = p + sizeof("END" CRLF) - 1;
u->keepalive = 1;
diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -1849,17 +1849,9 @@ ngx_http_proxy_process_status_line(ngx_h
u->headers_in.status_n = 200;
u->headers_in.connection_close = 1;
- if (u->state && u->state->status == 0) {
- u->state->status = NGX_HTTP_OK;
- }
-
return NGX_OK;
}
- if (u->state && u->state->status == 0) {
- u->state->status = ctx->status.code;
- }
-
u->headers_in.status_n = ctx->status.code;
len = ctx->status.end - ctx->status.start;
diff --git a/src/http/modules/ngx_http_scgi_module.c b/src/http/modules/ngx_http_scgi_module.c
--- a/src/http/modules/ngx_http_scgi_module.c
+++ b/src/http/modules/ngx_http_scgi_module.c
@@ -1032,10 +1032,6 @@ ngx_http_scgi_process_status_line(ngx_ht
return ngx_http_scgi_process_header(r);
}
- if (u->state && u->state->status == 0) {
- u->state->status = status->code;
- }
-
u->headers_in.status_n = status->code;
len = status->end - status->start;
@@ -1168,10 +1164,6 @@ ngx_http_scgi_process_header(ngx_http_re
ngx_str_set(&u->headers_in.status_line, "200 OK");
}
- if (u->state && u->state->status == 0) {
- u->state->status = u->headers_in.status_n;
- }
-
done:
if (u->headers_in.status_n == NGX_HTTP_SWITCHING_PROTOCOLS
diff --git a/src/http/modules/ngx_http_uwsgi_module.c b/src/http/modules/ngx_http_uwsgi_module.c
--- a/src/http/modules/ngx_http_uwsgi_module.c
+++ b/src/http/modules/ngx_http_uwsgi_module.c
@@ -1261,10 +1261,6 @@ ngx_http_uwsgi_process_status_line(ngx_h
return ngx_http_uwsgi_process_header(r);
}
- if (u->state && u->state->status == 0) {
- u->state->status = status->code;
- }
-
u->headers_in.status_n = status->code;
len = status->end - status->start;
@@ -1397,10 +1393,6 @@ ngx_http_uwsgi_process_header(ngx_http_r
ngx_str_set(&u->headers_in.status_line, "200 OK");
}
- if (u->state && u->state->status == 0) {
- u->state->status = u->headers_in.status_n;
- }
-
done:
if (u->headers_in.status_n == NGX_HTTP_SWITCHING_PROTOCOLS
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -2535,6 +2535,7 @@ ngx_http_upstream_process_header(ngx_htt
/* rc == NGX_OK */
+ u->state->status = u->headers_in.status_n;
u->state->header_time = ngx_current_msec - u->start_time;
if (u->headers_in.status_n >= NGX_HTTP_SPECIAL_RESPONSE) {
More information about the nginx-devel
mailing list