view auto/os/freebsd @ 3755:76e3a93821b1

fix race condition if during reconfiguration two cache managers try to delete old inactive entries: one of them removes a entry just locked by other manager from the queue and the rbtree as long inactive entry, causes the latter manager to segfault leaving cache mutex locked, the bug has been introduced in r3727
author Igor Sysoev <igor@sysoev.ru>
date Thu, 02 Sep 2010 14:31:47 +0000
parents 113cd532b328
children 0daede16d68b
line wrap: on
line source


# Copyright (C) Igor Sysoev


have=NGX_FREEBSD . auto/have_headers

CORE_INCS="$UNIX_INCS"
CORE_DEPS="$UNIX_DEPS $FREEBSD_DEPS"
CORE_SRCS="$UNIX_SRCS $FREEBSD_SRCS"

ngx_spacer='
'


# __FreeBSD_version and sysctl kern.osreldate are the best ways
# to determine whether some capability exists and is safe to use.
# __FreeBSD_version is used for the testing of the build environment.
# sysctl kern.osreldate is used for the testing of the kernel capabilities.

version=`grep "#define __FreeBSD_version" /usr/include/osreldate.h \
         | sed -e 's/^.* \(.*\)$/\1/'`

osreldate=`/sbin/sysctl -n kern.osreldate`


# setproctitle() in libutil

if [ \( $version -ge 500000 -a $version -lt 500012 \) \
     -o $version -lt 410002 ]
then
    echo " + setproctitle() in libutil"

    CORE_LIBS="$CORE_LIBS -lutil"
    NGX_SETPROCTITLE_LIB="-lutil"
fi

# sendfile

if [ $osreldate -gt 300007 ]; then
    echo " + sendfile() found"

    have=NGX_HAVE_SENDFILE . auto/have
    CORE_SRCS="$CORE_SRCS $FREEBSD_SENDFILE_SRCS"
fi

if [ $osreldate -gt 502103 ]; then
    echo " + sendfile()'s SF_NODISKIO found"

    have=NGX_HAVE_AIO_SENDFILE . auto/have
fi


# kqueue

if [ \( $osreldate -lt 500000 -a $osreldate -ge 410000 \) \
     -o $osreldate -ge 500011 ]
then
    echo " + kqueue found"

    have=NGX_HAVE_KQUEUE . auto/have
    have=NGX_HAVE_CLEAR_EVENT . auto/have
    EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
    CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
    EVENT_FOUND=YES
fi


NGX_KQUEUE_CHECKED=YES


# kqueue's NOTE_LAWAT

if [ \( $version -lt 500000 -a $version -ge 430000 \) \
     -o $version -ge 500018 ]
then
    echo " + kqueue's NOTE_LOWAT found"
    have=NGX_HAVE_LOWAT_EVENT . auto/have
fi

# kqueue's EVFILT_TIMER

if [ \( $version -lt 500000 -a $version -ge 440001 \) \
     -o $version -ge 500023 ]
then
    echo " + kqueue's EVFILT_TIMER found"
    have=NGX_HAVE_TIMER_EVENT . auto/have
fi


if [ $USE_THREADS = "rfork" ]; then

    echo " + using rfork()"

#    # kqueue's EVFILT_SIGNAL is safe
#
#    if [ $version -gt 460101 ]; then
#        echo " + kqueue's EVFILT_SIGNAL is safe"
#        have=NGX_HAVE_SAFE_EVFILT_SIGNAL . auto/have
#    else
#        echo "$0: error: the kqueue's EVFILT_SIGNAL is unsafe on this"
#        echo "FreeBSD version, so --with-threads=rfork could not be used"
#        echo
#
#        exit 1
#    fi
fi


if [ $EVENT_AIO = YES ]; then
    if [ \( $version -lt 500000 -a $version -ge 430000 \) \
         -o $version -ge 500014 ]
    then
        have=NGX_HAVE_AIO . auto/have
        EVENT_MODULES="$EVENT_MODULES $AIO_MODULE"
        CORE_SRCS="$CORE_SRCS $AIO_SRCS"
    else

cat << END

$0: error: the kqueue does not support AIO on this FreeBSD version

END

        exit 1
    fi
fi