nginx-0.0.7-2004-07-05-10:55:54 import
diff --git a/auto/lib/md5/conf b/auto/lib/md5/conf
index 3fc1af6..383821e 100644
--- a/auto/lib/md5/conf
+++ b/auto/lib/md5/conf
@@ -65,7 +65,7 @@
 
             ngx_lib="rsaref md library"
             ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
-            #ngx_libs=-lmd
+            ngx_libs=-lmd
             . auto/lib/test
         fi
 
diff --git a/auto/os/freebsd b/auto/os/freebsd
index 5fa8e33..2d3353e 100644
--- a/auto/os/freebsd
+++ b/auto/os/freebsd
@@ -54,11 +54,29 @@
      -o $version -ge 500018 ]
 then
     echo " + using kqueue's NOTE_LOWAT"
-
     have=HAVE_LOWAT_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=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
     have=HAVE_AIO . auto/have
     EVENT_MODULES="$EVENT_MODULES $AIO_MODULE"
diff --git a/auto/sources b/auto/sources
index 3fcf58e..041b23d 100644
--- a/auto/sources
+++ b/auto/sources
@@ -135,9 +135,12 @@
 FREEBSD_DEPS=src/os/unix/ngx_freebsd_config.h
 FREEBSD_SRCS=src/os/unix/ngx_freebsd_init.c
 FREEBSD_SENDFILE_SRCS=src/os/unix/ngx_freebsd_sendfile_chain.c
+FREEBSD_RFORK_DEPS="src/os/unix/ngx_freebsd_rfork_thread.h"
 FREEBSD_RFORK_SRCS="src/os/unix/ngx_freebsd_rfork_thread.c"
 FREEBSD_RFORK_THREAD_SRCS="src/os/unix/rfork_thread.S"
 
+PTHREAD_SRCS="src/os/unix/ngx_pthread_thread.c"
+
 LINUX_DEPS=src/os/unix/ngx_linux_config.h
 LINUX_SRCS=src/os/unix/ngx_linux_init.c
 LINUX_SENDFILE_SRCS=src/os/unix/ngx_linux_sendfile_chain.c
diff --git a/auto/threads b/auto/threads
index 0c5fd56..8f7e10b 100644
--- a/auto/threads
+++ b/auto/threads
@@ -1,13 +1,51 @@
 
-if [ $USE_THREADS = "rfork" ]; then
+case $USE_THREADS in
+    rfork)
+        have=NGX_THREADS . auto/have
+        have=NGX_USE_RFORK . auto/have
+        CORE_DEPS="$CORE_DEPS $FREEBSD_RFORK_DEPS"
+        CORE_SRCS="$CORE_SRCS $FREEBSD_RFORK_SRCS"
 
-    have=NGX_THREADS . auto/have
-    have=NGX_USE_RFORK . auto/have
-    CORE_DEPS="$CORE_DEPS $UNIX_THREADS_DEPS"
-    CORE_SRCS="$CORE_SRCS $FREEBSD_RFORK_SRCS"
+        case $PLATFORM in
+            *:i386)
+                if [ \( $version -gt 500000 -a $version -lt 501000 \) \
+                     -o $version -lt 491000 ]
+                then
+                    CORE_SRCS="$CORE_SRCS $FREEBSD_RFORK_THREAD_SRCS"
+                fi
+            ;;
+        esac
+    ;;
 
-    if [ $version -lt 501000 ]; then
-        CORE_SRCS="$CORE_SRCS $FREEBSD_RFORK_THREAD_SRCS"
-    fi
+    pthread)
+        have=NGX_THREADS . auto/have
+        CORE_SRCS="$CORE_SRCS $PTHREAD_SRCS"
+        CORE_LIBS="$CORE_LIBS -lpthread"
+    ;;
 
-fi
+    freebsd4)
+        have=NGX_THREADS . auto/have
+        CFLAGS="$CFLAGS -pthread"
+        CORE_SRCS="$CORE_SRCS $PTHREAD_SRCS"
+        CORE_LIBS="$CORE_LIBS -pthread"
+    ;;
+
+    lc_r)
+        have=NGX_THREADS . auto/have
+        CORE_SRCS="$CORE_SRCS $PTHREAD_SRCS"
+        CORE_LIBS="$CORE_LIBS -lc_r"
+    ;;
+
+    lthr)
+        have=NGX_THREADS . auto/have
+        CORE_SRCS="$CORE_SRCS $PTHREAD_SRCS"
+        CORE_LIBS="$CORE_LIBS -lthr"
+    ;;
+
+    lkse)
+        have=NGX_THREADS . auto/have
+        CORE_SRCS="$CORE_SRCS $PTHREAD_SRCS"
+        CORE_LIBS="$CORE_LIBS -lkse"
+    ;;
+
+esac