annotate auto/lib/google-perftools/conf @ 9300:5be23505292b default tip

SSI: fixed incorrect or duplicate stub output. Following 3518:eb3aaf8bd2a9 (0.8.37), r->request_output is only set if there are data in the first buffer sent in the subrequest. As a result, following the change mentioned this flag cannot be used to prevent duplicate ngx_http_ssi_stub_output() calls, since it is not set if there was already some output, but the first buffer was empty. Still, when there are multiple subrequests, even an empty subrequest response might be delayed by the postpone filter, leading to a second call of ngx_http_ssi_stub_output() during finalization from ngx_http_writer() the subreqest buffers are released by the postpone filter. Since r->request_output is not set after the first call, this resulted in duplicate stub output. Additionally, checking only the first buffer might be wrong in some unusual cases. For example, the first buffer might be empty if $r->flush() is called before printing any data in the embedded Perl module. Depending on the postpone_output value and corresponding sizes, this issue can result in either duplicate or unexpected stub output, or "zero size buf in writer" alerts. Following 8124:f5515e727656 (1.23.4), it became slightly easier to reproduce the issue, as empty static files and empty cache items now result in a response with an empty buffer. Before the change, an empty proxied response can be used to reproduce the issue. Fix is check all buffers and set r->request_output if any non-empty buffers are sent. This ensures that all unusual cases of non-empty responses are covered, and also that r->request_output will be set after the first stub output, preventing duplicate output. Reported by Jan Gassen.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 04 Jul 2024 17:41:28 +0300
parents f7e79596baf2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1949
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 # Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 2893
diff changeset
3 # Copyright (C) Nginx, Inc.
1949
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6 ngx_feature="Google perftools"
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 ngx_feature_name=
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 ngx_feature_run=no
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 ngx_feature_incs=
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 ngx_feature_path=
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 ngx_feature_libs="-lprofiler"
7327
f7e79596baf2 Configure: fixed compiler warnings with "-Wall -Wextra".
Sergey Kandaurov <pluknet@nginx.com>
parents: 5678
diff changeset
12 ngx_feature_test="void ProfilerStop(void);
f7e79596baf2 Configure: fixed compiler warnings with "-Wall -Wextra".
Sergey Kandaurov <pluknet@nginx.com>
parents: 5678
diff changeset
13 ProfilerStop()"
1949
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 . auto/feature
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 if [ $ngx_found = no ]; then
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 # FreeBSD port
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 ngx_feature="Google perftools in /usr/local/"
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 if [ $NGX_RPATH = YES ]; then
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lprofiler"
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 else
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 ngx_feature_libs="-L/usr/local/lib -lprofiler"
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 fi
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 . auto/feature
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 fi
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32
4704
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
33 if [ $ngx_found = no ]; then
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
34
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
35 # MacPorts
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
36
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
37 ngx_feature="Google perftools in /opt/local/"
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
38
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
39 if [ $NGX_RPATH = YES ]; then
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
40 ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lprofiler"
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
41 else
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
42 ngx_feature_libs="-L/opt/local/lib -lprofiler"
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
43 fi
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
44
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
45 . auto/feature
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
46 fi
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
47
642755ee3fab Added code to look up Google perftools in /opt/local/, for MacPorts.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
48
1949
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 if [ $ngx_found = yes ]; then
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
2893
da1ba8a5c8c9 stop ./configure at once on library failure
Igor Sysoev <igor@sysoev.ru>
parents: 1949
diff changeset
51
da1ba8a5c8c9 stop ./configure at once on library failure
Igor Sysoev <igor@sysoev.ru>
parents: 1949
diff changeset
52 else
da1ba8a5c8c9 stop ./configure at once on library failure
Igor Sysoev <igor@sysoev.ru>
parents: 1949
diff changeset
53
da1ba8a5c8c9 stop ./configure at once on library failure
Igor Sysoev <igor@sysoev.ru>
parents: 1949
diff changeset
54 cat << END
da1ba8a5c8c9 stop ./configure at once on library failure
Igor Sysoev <igor@sysoev.ru>
parents: 1949
diff changeset
55
5678
0e1491139947 Configure: typo fixed.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4704
diff changeset
56 $0: error: the Google perftools module requires the Google perftools
2893
da1ba8a5c8c9 stop ./configure at once on library failure
Igor Sysoev <igor@sysoev.ru>
parents: 1949
diff changeset
57 library. You can either do not enable the module or install the library.
da1ba8a5c8c9 stop ./configure at once on library failure
Igor Sysoev <igor@sysoev.ru>
parents: 1949
diff changeset
58
da1ba8a5c8c9 stop ./configure at once on library failure
Igor Sysoev <igor@sysoev.ru>
parents: 1949
diff changeset
59 END
da1ba8a5c8c9 stop ./configure at once on library failure
Igor Sysoev <igor@sysoev.ru>
parents: 1949
diff changeset
60
da1ba8a5c8c9 stop ./configure at once on library failure
Igor Sysoev <igor@sysoev.ru>
parents: 1949
diff changeset
61 exit 1
1949
e5ce4e2de846 ngx_google_perftools_module
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 fi