Index: include/arch/unix/apr_arch_threadproc.h
===================================================================
--- include/arch/unix/apr_arch_threadproc.h	(revision 381278)
+++ include/arch/unix/apr_arch_threadproc.h	(working copy)
@@ -39,6 +39,9 @@
 #if APR_HAVE_STRING_H
 #include <string.h>
 #endif
+#if HAVE_SCHED_H
+#include <sched.h>
+#endif
 /* End System Headers */
 
 
Index: configure.in
===================================================================
--- configure.in	(revision 381278)
+++ configure.in	(working copy)
@@ -580,7 +580,7 @@
         APR_CHECK_PTHREAD_ATTR_GETDETACHSTATE_ONE_ARG
         APR_CHECK_PTHREAD_RECURSIVE_MUTEX
         AC_CHECK_FUNCS([pthread_key_delete pthread_rwlock_init \
-                        pthread_attr_setguardsize])
+                        pthread_attr_setguardsize pthread_yield])
 
         if test "$ac_cv_func_pthread_rwlock_init" = "yes"; then
             dnl ----------------------------- Checking for pthread_rwlock_t
@@ -593,6 +593,12 @@
                AC_DEFINE(HAVE_PTHREAD_RWLOCKS, 1, [Define if pthread rwlocks are available])
             fi
         fi
+
+        if test "$ac_cv_func_pthread_yield" = "no"; then
+            dnl ----------------------------- Checking for sched_yield
+	    AC_CHECK_HEADERS([sched.h])
+            AC_CHECK_FUNCS([sched_yield])
+        fi
     fi
 fi
 
Index: threadproc/unix/thread.c
===================================================================
--- threadproc/unix/thread.c	(revision 381278)
+++ threadproc/unix/thread.c	(working copy)
@@ -245,8 +245,15 @@
     }
 }
 
-void apr_thread_yield()
+APR_DECLARE(void) apr_thread_yield(void)
 {
+#ifdef HAVE_PTHREAD_YIELD
+    pthread_yield();
+#else
+#ifdef HAVE_SCHED_YIELD
+    sched_yield();
+#endif
+#endif
 }
 
 APR_DECLARE(apr_status_t) apr_thread_data_get(void **data, const char *key,


