nginx-0.3.2-RELEASE import

    *) Feature: the Sun Studio 10 C compiler support.

    *) Feature: the "proxy_upstream_max_fails",
       "proxy_upstream_fail_timeout", "fastcgi_upstream_max_fails", and
       "fastcgi_upstream_fail_timeout" directives.
diff --git a/auto/cc/conf b/auto/cc/conf
index 4d151da..37f2d2e 100644
--- a/auto/cc/conf
+++ b/auto/cc/conf
@@ -44,7 +44,7 @@
         gcc)
             # gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2
             #     3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4.0, 3.4.2
-            #     4.0.0
+            #     4.0.0, 4.0.1, 4.1.0
 
             . auto/cc/gcc
         ;;
@@ -55,6 +55,12 @@
             . auto/cc/icc
         ;;
 
+        sunc)
+            # Sun C 5.7 Patch 117837-04 2005/05/11
+
+            . auto/cc/sunc
+        ;;
+
         ccc)
             # Compaq C V6.5-207
 
diff --git a/auto/cc/gcc b/auto/cc/gcc
index d76d4a2..af279fa 100644
--- a/auto/cc/gcc
+++ b/auto/cc/gcc
@@ -33,6 +33,17 @@
     PIPE="-pipe"
 fi
 
+
+case "$NGX_PLATFORM" in
+
+    *:sun4u)
+        # "-mcpu=v9" enables the "casxa" assembler instruction
+        CFLAGS="$CFLAGS -mcpu=v9"
+    ;;
+
+esac
+
+
 # optimizations
 
 #NGX_GCC_OPT="-O2"
@@ -49,7 +60,7 @@
         CPU_OPT="-march=pentium"
     ;;
 
-    pentiumpro)
+    pentiumpro | pentium3)
         # optimize for Pentium Pro, Pentium II and Pentium III
         CPU_OPT="-march=pentiumpro"
     ;;
diff --git a/auto/cc/icc b/auto/cc/icc
index cca24cd..0aa975e 100644
--- a/auto/cc/icc
+++ b/auto/cc/icc
@@ -94,6 +94,8 @@
 CFLAGS="$CFLAGS -wd1419"
 # explicit conversion of a 64-bit integral type to a smaller integral type
 CFLAGS="$CFLAGS -wd1683"
+# conversion from pointer to same-sized integral type, warning on offsetof()
+CFLAGS="$CFLAGS -wd1684"
 
 case "$NGX_ICC_VER" in
     8.* | 9.*)
diff --git a/auto/cc/name b/auto/cc/name
index c89ce79..faa3290 100644
--- a/auto/cc/name
+++ b/auto/cc/name
@@ -39,6 +39,11 @@
     echo " using Intel C++ compiler"
 
 else
+if `$CC -V 2>&1 | grep 'Sun C' 2>&1 >/dev/null`; then
+    NGX_CC_NAME=sunc
+    echo " using Sun C compiler"
+
+else
 if `$CC -V 2>&1 | grep '^Compaq C' 2>&1 >/dev/null`; then
     NGX_CC_NAME=ccc
     echo " using Compaq C compiler"
@@ -54,6 +59,7 @@
 
 fi # acc
 fi # ccc
+fi # sunc
 fi # icc
 fi # gcc
 fi # bcc
diff --git a/auto/cc/sunc b/auto/cc/sunc
new file mode 100644
index 0000000..9d400a2
--- /dev/null
+++ b/auto/cc/sunc
@@ -0,0 +1,95 @@
+
+# Copyright (C) Igor Sysoev
+
+
+# Sun C 5.7 Patch 117837-04 2005/05/11
+
+NGX_SUNC_VER=`$CC -V 2>&1 | grep 'Sun C' 2>&1 \
+                         | sed -e 's/^.* Sun C \(.*\)/\1/'`
+
+echo " + Sun C version: $NGX_SUNC_VER"
+
+have=NGX_COMPILER value="\"Sun C $NGX_SUNC_VER\"" . auto/define
+
+
+case "$NGX_PLATFORM" in
+
+    *:i86pc)
+        NGX_AUX=" src/os/unix/ngx_sunpro_x86.il"
+    ;;
+
+    *:sun4u)
+        # "-xarch=v9" enables the "casa" assembler instruction
+        CFLAGS="$CFLAGS -xarch=v9"
+        CORE_LINK="$CORE_LINK -xarch=v9"
+        NGX_AUX=" src/os/unix/ngx_sunpro_sparc64.il"
+    ;;
+
+esac
+
+
+# optimizations
+
+CFLAGS="$CFLAGS -fast"
+
+
+case $CPU in
+    pentium)
+        # optimize for Pentium and Athlon
+        CPU_OPT="-xchip=pentium"
+    ;;
+
+    pentiumpro)
+        # optimize for Pentium Pro, Pentium II
+        CPU_OPT="-xchip=pentium_pro"
+    ;;
+
+    pentium3)
+        # optimize for Pentium III
+        CPU_OPT="-xchip=pentium3"
+        #CPU_OPT="$CPU_OPT -xarch=sse"
+        CPU_OPT="$CPU_OPT -xcache=16/32/4:256/32/4"
+    ;;
+
+    pentium4)
+        # optimize for Pentium 4
+        CPU_OPT="-xchip=pentium4"
+        #CPU_OPT="$CPU_OPT -xarch=sse2"
+        CPU_OPT="$CPU_OPT -xcache=8/64/4:256/128/8"
+    ;;
+
+    opteron)
+        # optimize for Opteron
+        CPU_OPT="-xchip=opteron"
+        #CPU_OPT="$CPU_OPT -xarch=sse2"
+        CPU_OPT="$CPU_OPT -xcache=64/64/2:1024/64/16"
+    ;;
+
+    amd64)
+        # build 64-bit amd64 binary
+        CPU_OPT="-xarch=amd64"
+        CORE_LINK="$CORE_LINK -xarch=amd64"
+        NGX_AUX=" src/os/unix/ngx_sunpro_amd64.il"
+    ;;
+
+esac
+
+
+CFLAGS="$CFLAGS $CPU_OPT"
+
+
+if [ ".$PCRE_OPT" = "." ]; then
+    PCRE_OPT="-fast $CPU_OPT"
+fi
+
+if [ ".$MD5_OPT" = "." ]; then
+    MD5_OPT="-fast $CPU_OPT"
+fi
+
+if [ ".$ZLIB_OPT" = "." ]; then
+    ZLIB_OPT="-fast $CPU_OPT"
+fi
+
+
+# stop on warning
+CFLAGS="$CFLAGS -errwarn=%all"
diff --git a/auto/configure b/auto/configure
index f54ef24..daff4bd 100755
--- a/auto/configure
+++ b/auto/configure
@@ -23,8 +23,8 @@
     . auto/headers
 fi
 
-. auto/cc/conf
 . auto/os/conf
+. auto/cc/conf
 
 if [ "$NGX_PLATFORM" != win32 ]; then
     . auto/os/features
diff --git a/auto/lib/openssl/conf b/auto/lib/openssl/conf
index c8c47e2..0370fe0 100644
--- a/auto/lib/openssl/conf
+++ b/auto/lib/openssl/conf
@@ -36,6 +36,12 @@
         if [ $ngx_found = yes ]; then
             CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
             OPENSSL=YES
+
+            case "$NGX_SYSTEM" in
+                SunOS)
+                    CORE_LIBS="$CORE_LIBS -ldl"
+                ;;
+            esac
         fi
 
     fi
diff --git a/auto/lib/pcre/conf b/auto/lib/pcre/conf
index 1b79f94..946b26e 100644
--- a/auto/lib/pcre/conf
+++ b/auto/lib/pcre/conf
@@ -17,7 +17,7 @@
             CORE_LIBS="$CORE_LIBS $PCRE/pcre.lib"
         ;;
 
-        icc*)
+        icc* | sunc )
             have=NGX_PCRE . auto/have
             CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
 
diff --git a/auto/make b/auto/make
index 866fb34..fcc05b1 100644
--- a/auto/make
+++ b/auto/make
@@ -200,7 +200,7 @@
 cat << END                                                    >> $NGX_MAKEFILE
 
 $ngx_modules_obj:	\$(CORE_DEPS)$ngx_cont$ngx_modules_c
-	$ngx_cc$ngx_tab$ngx_objout$ngx_modules_obj$ngx_tab$ngx_modules_c
+	$ngx_cc$ngx_tab$ngx_objout$ngx_modules_obj$ngx_tab$ngx_modules_c$NGX_AUX
 
 END
 
@@ -219,7 +219,7 @@
     cat << END                                                >> $NGX_MAKEFILE
 
 $ngx_obj:	\$(CORE_DEPS)$ngx_cont$ngx_src
-	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src
+	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
 
 END
 
@@ -248,7 +248,7 @@
         cat << END                                            >> $NGX_MAKEFILE
 
 $ngx_obj:	\$(CORE_DEPS) \$(HTTP_DEPS)$ngx_cont$ngx_src
-	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src
+	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
 
 END
      done
@@ -278,7 +278,7 @@
         cat << END                                            >> $NGX_MAKEFILE
 
 $ngx_obj:	\$(CORE_DEPS) \$(IMAP_DEPS)$ngx_cont$ngx_src
-	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src
+	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
 
 END
      done
@@ -310,7 +310,7 @@
         cat << END                                            >> $NGX_MAKEFILE
 
 $ngx_obj:	\$(ADDON_DEPS)$ngx_cont$ngx_src
-	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src
+	$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
 
 END
      done
diff --git a/auto/os/solaris b/auto/os/solaris
index cf7fc6c..73c9372 100644
--- a/auto/os/solaris
+++ b/auto/os/solaris
@@ -12,17 +12,7 @@
 # Solaris's make does not support a blank line between target and rules
 ngx_spacer=
 
-CC_AUX_FLAGS="$CC_AUX_FLAGS -D_FILE_OFFSET_BITS=64 -lrt"
-
-
-case "$NGX_PLATFORM" in
-
-    *:sun4u)
-        # "-mcpu=v9" enables the "casa" assembler instruction
-        CFLAGS="$CFLAGS -mcpu=v9"
-    ;;
-
-esac
+CC_AUX_FLAGS="$CC_AUX_FLAGS -D_FILE_OFFSET_BITS=64 -lsocket -lnsl -lrt"
 
 
 if [ $ZLIB_ASM != NO ]; then
diff --git a/auto/sources b/auto/sources
index bf04894..bd9259a 100644
--- a/auto/sources
+++ b/auto/sources
@@ -123,12 +123,23 @@
             src/os/unix/ngx_process.h \
             src/os/unix/ngx_setproctitle.h \
             src/os/unix/ngx_atomic.h \
+            src/os/unix/ngx_gcc_atomic_x86.h \
             src/os/unix/ngx_thread.h \
             src/os/unix/ngx_socket.h \
             src/os/unix/ngx_os.h \
             src/os/unix/ngx_user.h \
             src/os/unix/ngx_process_cycle.h"
 
+# add to UNIX_DEPS
+#            src/os/unix/ngx_gcc_atomic_amd64.h \
+#            src/os/unix/ngx_gcc_atomic_sparc64.h \
+#            src/os/unix/ngx_gcc_atomic_ppc.h \
+#            src/os/unix/ngx_sunpro_atomic_sparc64.h \
+#            src/os/unix/ngx_sunpro_x86.il \
+#            src/os/unix/ngx_sunpro_amd64.il \
+#            src/os/unix/ngx_sunpro_sparc64.il \
+
+
 UNIX_SRCS="$CORE_SRCS $EVENT_SRCS \
             src/core/ngx_unix_domain.c \
             src/os/unix/ngx_time.c \