view auto/lib/perl/conf @ 8910:f3510cb959d1

Events: fixed EPOLLRDHUP with FIONREAD (ticket #2367). When reading exactly rev->available bytes, rev->available might become 0 after FIONREAD usage introduction in efd71d49bde0. On the next call of ngx_readv_chain() on systems with EPOLLRDHUP this resulted in return without any actions, that is, with rev->ready set, and this in turn resulted in no timers set in event pipe, leading to socket leaks. Fix is to reset rev->ready in ngx_readv_chain() when returning due to rev->available being 0 with EPOLLRDHUP, much like it is already done in ngx_unix_recv(). This ensures that if rev->available will become 0, on systems with EPOLLRDHUP support appropriate EPOLLRDHUP-specific handling will happen on the next ngx_readv_chain() call. While here, also synced ngx_readv_chain() to match ngx_unix_recv() and reset rev->ready when returning due to rev->available being 0 with kqueue. This is mostly cosmetic change, as rev->ready is anyway reset when rev->available is set to 0.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 15 Jul 2022 15:19:32 +0300
parents 30b6f1ff192b
children
line wrap: on
line source


# Copyright (C) Igor Sysoev
# Copyright (C) Nginx, Inc.


echo "checking for perl"


NGX_PERL_VER=`$NGX_PERL -v 2>&1 | grep '^This is perl' 2>&1 \
                                | sed -e 's/^This is perl, \(.*\)/\1/'`

if test -n "$NGX_PERL_VER"; then
    echo " + perl version: $NGX_PERL_VER"

    if [ "`$NGX_PERL -e 'use 5.008006; print "OK"'`" != "OK" ]; then
        echo
        echo "$0: error: perl 5.8.6 or higher is required"
        echo

        exit 1;
    fi

    if [ "`$NGX_PERL -MExtUtils::Embed -e 'print "OK"'`" != "OK" ]; then
        echo
        echo "$0: error: perl module ExtUtils::Embed is required"
        echo

        exit 1;
    fi

    NGX_PM_CFLAGS=`$NGX_PERL -MExtUtils::Embed -e ccopts`
    NGX_PM_LDFLAGS=`$NGX_PERL -MConfig -e 'print $Config{lddlflags}'`

    NGX_PERL_CFLAGS="$CFLAGS `$NGX_PERL -MExtUtils::Embed -e ccopts`"

    # gcc 4.1/4.2 warn about unused values in pTHX_
    NGX_PERL_CFLAGS=`echo $NGX_PERL_CFLAGS \
                     | sed -e 's/-Wunused-value/-Wno-unused-value/'`
    # icc8 warns 'declaration hides parameter "my_perl"' in ENTER and LEAVE
    NGX_PERL_CFLAGS=`echo $NGX_PERL_CFLAGS \
                     | sed -e 's/-wd171/-wd171 -wd1599/'`

    ngx_perl_ldopts=`$NGX_PERL -MExtUtils::Embed -e ldopts`

    ngx_perl_dlext=`$NGX_PERL -MConfig -e 'print $Config{dlext}'`
    ngx_perl_libdir="src/http/modules/perl/blib/arch/auto"
    ngx_perl_module="$ngx_perl_libdir/nginx/nginx.$ngx_perl_dlext"

    if $NGX_PERL -V:usemultiplicity | grep define > /dev/null; then
        have=NGX_HAVE_PERL_MULTIPLICITY . auto/have
        echo " + perl interpreter multiplicity found"
    fi

    if $NGX_PERL -V:useithreads | grep undef > /dev/null; then
        # FreeBSD port wants to link with -pthread non-threaded perl
        ngx_perl_ldopts=`echo $ngx_perl_ldopts | sed 's/ -pthread//'`
    fi

    if [ "$NGX_SYSTEM" = "Darwin" ]; then
        # OS X system perl wants to link universal binaries
        ngx_perl_ldopts=`echo $ngx_perl_ldopts \
                         | sed -e 's/-arch i386//' -e 's/-arch x86_64//'`
    fi

    if [ $USE_PERL = YES ]; then
        CORE_LINK="$CORE_LINK $ngx_perl_ldopts"
    fi

    NGX_LIB_PERL="$ngx_perl_ldopts"

    if test -n "$NGX_PERL_MODULES"; then
        have=NGX_PERL_MODULES value="(u_char *) \"$NGX_PERL_MODULES\""
        . auto/define
        NGX_PERL_MODULES_MAN=$NGX_PERL_MODULES/man3
    fi

else
    echo
    echo "$0: error: perl 5.8.6 or higher is required"
    echo

    exit 1;
fi