use POSIX semaphores in shmtx instead of sched_yield()
number of spinlock spins are increased twice
diff --git a/auto/os/freebsd b/auto/os/freebsd
index 2098529..0829388 100644
--- a/auto/os/freebsd
+++ b/auto/os/freebsd
@@ -49,6 +49,15 @@
     have=NGX_HAVE_AIO_SENDFILE . auto/have
 fi
 
+# POSIX semaphores
+# http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/127545
+
+if [ $osreldate -ge 701106 ]; then
+    echo " + POSIX semaphores should work"
+else
+    have=NGX_HAVE_POSIX_SEM . auto/nohave
+fi
+
 
 # kqueue
 
diff --git a/auto/unix b/auto/unix
index c2d3ba2..669314b 100755
--- a/auto/unix
+++ b/auto/unix
@@ -234,6 +234,18 @@
 . auto/feature
 
 
+ngx_feature="POSIX semaphores"
+ngx_feature_name="NGX_HAVE_POSIX_SEM"
+ngx_feature_run=yes
+ngx_feature_incs="#include <semaphore.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="sem_t  sem;
+                  if (sem_init(&sem, 1, 0) == -1) return 1;
+                  sem_destroy(&sem);"
+. auto/feature
+
+
 ngx_feature="struct msghdr.msg_control"
 ngx_feature_name="NGX_HAVE_MSGHDR_MSG_CONTROL"
 ngx_feature_run=no