annotate auto/lib/libatomic/conf @ 8844:011f5ebdb928

HTTP/2: fixed closed_nodes overflow (ticket #1708). With large http2_max_concurrent_streams or http2_max_concurrent_pushes, more than 255 ngx_http_v2_node_t structures might be allocated, eventually leading to h2c->closed_nodes overflow when closing corresponding streams. This will in turn result in additional allocations in ngx_http_v2_get_node_by_id(). While mostly harmless, it can result in excessive memory usage by a HTTP/2 connection, notably in configurations with many keepalive_requests allowed. Fix is to use ngx_uint_t for h2c->closed_nodes instead of unsigned:8.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 03 Feb 2022 22:46:01 +0300
parents d620f497c50f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3363
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 # Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 3378
diff changeset
3 # Copyright (C) Nginx, Inc.
3363
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6 if [ $NGX_LIBATOMIC != YES ]; then
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 have=NGX_HAVE_LIBATOMIC . auto/have
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 CORE_INCS="$CORE_INCS $NGX_LIBATOMIC/src"
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 LINK_DEPS="$LINK_DEPS $NGX_LIBATOMIC/src/libatomic_ops.a"
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 CORE_LIBS="$CORE_LIBS $NGX_LIBATOMIC/src/libatomic_ops.a"
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 else
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 ngx_feature="atomic_ops library"
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 ngx_feature_name=NGX_HAVE_LIBATOMIC
3366
b44a7159c5fb atomic operations test-run
Igor Sysoev <igor@sysoev.ru>
parents: 3363
diff changeset
17 ngx_feature_run=yes
3378
5d17022a1e88 fix libatomic usage on arm, cris, hppa, m68k, and sparc platforms
Igor Sysoev <igor@sysoev.ru>
parents: 3366
diff changeset
18 ngx_feature_incs="#define AO_REQUIRE_CAS
5d17022a1e88 fix libatomic usage on arm, cris, hppa, m68k, and sparc platforms
Igor Sysoev <igor@sysoev.ru>
parents: 3366
diff changeset
19 #include <atomic_ops.h>"
3363
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 ngx_feature_path=
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 ngx_feature_libs="-latomic_ops"
3366
b44a7159c5fb atomic operations test-run
Igor Sysoev <igor@sysoev.ru>
parents: 3363
diff changeset
22 ngx_feature_test="long n = 0;
b44a7159c5fb atomic operations test-run
Igor Sysoev <igor@sysoev.ru>
parents: 3363
diff changeset
23 if (!AO_compare_and_swap(&n, 0, 1))
b44a7159c5fb atomic operations test-run
Igor Sysoev <igor@sysoev.ru>
parents: 3363
diff changeset
24 return 1;
b44a7159c5fb atomic operations test-run
Igor Sysoev <igor@sysoev.ru>
parents: 3363
diff changeset
25 if (AO_fetch_and_add(&n, 1) != 1)
b44a7159c5fb atomic operations test-run
Igor Sysoev <igor@sysoev.ru>
parents: 3363
diff changeset
26 return 1;
b44a7159c5fb atomic operations test-run
Igor Sysoev <igor@sysoev.ru>
parents: 3363
diff changeset
27 if (n != 2)
b44a7159c5fb atomic operations test-run
Igor Sysoev <igor@sysoev.ru>
parents: 3363
diff changeset
28 return 1;
3363
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 AO_nop();"
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 . auto/feature
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32 if [ $ngx_found = yes ]; then
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 else
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 cat << END
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 $0: error: libatomic_ops library was not found.
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 END
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 exit 1
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 fi
b4aa418af6ef libatomic_ops support
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 fi