Mercurial > hg > nginx
view auto/module @ 7610:82c1339e2637
HTTP/2: fixed socket leak with queued frames (ticket #1689).
If a stream is closed with queued frames, it is possible that no further
write events will occur on the stream, leading to the socket leak.
To fix this, the stream's fake connection read handler is set to
ngx_http_v2_close_stream_handler(), to make sure that finalizing the
connection with ngx_http_v2_finalize_connection() will be able to
close the stream regardless of the current number of queued frames.
Additionally, the stream's fake connection fc->error flag is explicitly
set, so ngx_http_v2_handle_stream() will post a write event when queued
frames are finally sent even if stream flow control window is exhausted.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 23 Dec 2019 21:25:17 +0300 |
parents | 2c7a2d75938a |
children | 4b1299b1856a |
line wrap: on
line source
# Copyright (C) Ruslan Ermilov # Copyright (C) Nginx, Inc. case $ngx_module_type in HTTP_*) ngx_var=HTTP ;; *) ngx_var=$ngx_module_type ;; esac if [ "$ngx_module_link" = DYNAMIC ]; then for ngx_module in $ngx_module_name; do # extract the first name break done DYNAMIC_MODULES="$DYNAMIC_MODULES $ngx_module" eval ${ngx_module}_SRCS=\"$ngx_module_srcs\" eval ${ngx_module}_MODULES=\"$ngx_module_name\" if [ -z "$ngx_module_order" -a \ \( "$ngx_module_type" = "HTTP_FILTER" \ -o "$ngx_module_type" = "HTTP_AUX_FILTER" \) ] then eval ${ngx_module}_ORDER=\"$ngx_module_name \ ngx_http_copy_filter_module\" else eval ${ngx_module}_ORDER=\"$ngx_module_order\" fi if test -n "$ngx_module_incs"; then CORE_INCS="$CORE_INCS $ngx_module_incs" fi if test -n "$ngx_module_deps"; then NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_module_deps" fi libs= for lib in $ngx_module_libs do case $lib in LIBXSLT | LIBGD | GEOIP | PERL) libs="$libs \$NGX_LIB_$lib" if eval [ "\$USE_${lib}" = NO ] ; then eval USE_${lib}=DYNAMIC fi ;; PCRE | OPENSSL | ZLIB) eval USE_${lib}=YES ;; MD5 | SHA1) # obsolete ;; *) libs="$libs $lib" ;; esac done eval ${ngx_module}_LIBS=\'$libs\' elif [ "$ngx_module_link" = YES ]; then eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \ $ngx_module_name\" eval ${ngx_var}_SRCS=\"\$${ngx_var}_SRCS $ngx_module_srcs\" if test -n "$ngx_module_incs"; then eval ${ngx_var}_INCS=\"\$${ngx_var}_INCS $ngx_module_incs\" fi if test -n "$ngx_module_deps"; then eval ${ngx_var}_DEPS=\"\$${ngx_var}_DEPS $ngx_module_deps\" fi for lib in $ngx_module_libs do case $lib in PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP) eval USE_${lib}=YES ;; MD5 | SHA1) # obsolete ;; *) CORE_LIBS="$CORE_LIBS $lib" ;; esac done elif [ "$ngx_module_link" = ADDON ]; then eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \ $ngx_module_name\" NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_module_srcs" if test -n "$ngx_module_incs"; then eval ${ngx_var}_INCS=\"\$${ngx_var}_INCS $ngx_module_incs\" fi if test -n "$ngx_module_deps"; then NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_module_deps" fi for lib in $ngx_module_libs do case $lib in PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP) eval USE_${lib}=YES ;; MD5 | SHA1) # obsolete ;; *) CORE_LIBS="$CORE_LIBS $lib" ;; esac done fi