This patch would allow the use of pthread-related code (think mutex and rwlocks, etc.) without having threads. Not everything in pthread is related to threads...
Would applying this break anything? Could having the pthread library linked (assuming it has it, of course) cause a problem (even though we aren't using threads)? This allows us to use pthread_mutex_t in cross-process mode even if we aren't threaded. (Think of the accept mutex in httpd.) -- justin Index: configure.in =================================================================== RCS file: /home/cvs/apr/configure.in,v retrieving revision 1.345 diff -u -r1.345 configure.in --- configure.in 2001/07/26 00:08:40 1.345 +++ configure.in 2001/07/26 22:13:54 @@ -257,15 +257,18 @@ if test -z "$enable_threads"; then AC_ARG_ENABLE(threads, [ --enable-threads Enable threading support in APR.], - [ enable_threads=$enableval] , + [ enable_threads=$enableval ], [ APR_CHECK_PTHREADS_H([ enable_threads="pthread" ] , [ enable_threads="no" ] ) ] ) fi if test "$enable_threads" = "no"; then threads="0" - pthreadh="0" pthreadser="0" + APR_PTHREADS_CHECK_SAVE + APR_PTHREADS_CHECK + APR_CHECK_PTHREADS_H([ pthreadh="1" ], + [ pthreadh="0" APR_PTHREADS_CHECK_RESTORE ] ) else if test "$enable_threads" = "pthread"; then # We have specified pthreads for our threading library, just make sure @@ -304,29 +307,33 @@ if test "$pthreadh" = "1"; then APR_CHECK_PTHREAD_GETSPECIFIC_TWO_ARGS APR_CHECK_PTHREAD_ATTR_GETDETACHSTATE_ONE_ARG - AC_CHECK_FUNCS(pthread_key_delete pthread_rwlock_init) + AC_CHECK_FUNCS(pthread_key_delete) + fi +fi + +if test "$pthreadh" = "1"; then + AC_CHECK_FUNCS(pthread_rwlock_init) - if test "$ac_cv_func_pthread_rwlock_init" = "yes"; then - dnl #----------------------------- Checking for pthread_rwlock_t - dnl # Linux is silly as it has pthread_rwlock_init defined - dnl # but keeps the pthread_rwlock_t structure hidden unless - dnl # special things are defined. - AC_TRY_COMPILE([#include <sys/types.h> - #include <pthread.h>], + if test "$ac_cv_func_pthread_rwlock_init" = "yes"; then + dnl #----------------------------- Checking for pthread_rwlock_t + dnl # Linux is silly as it has pthread_rwlock_init defined + dnl # but keeps the pthread_rwlock_t structure hidden unless + dnl # special things are defined. + AC_TRY_COMPILE([#include <sys/types.h> + #include <pthread.h>], + [pthread_rwlock_t rwlock=PTHREAD_RWLOCK_INITIALIZER;], + ac_cv_struct_pthread_rw=yes, ac_cv_struct_pthread_rw=no) + if test "$ac_cv_struct_pthread_rw" = "no"; then + AC_TRY_COMPILE([#define _XOPEN_SOURCE 500 + #define _BSD_SOURCE + #define _SVID_SOURCE + #include <sys/types.h> + #include <pthread.h>], [pthread_rwlock_t rwlock=PTHREAD_RWLOCK_INITIALIZER;], - ac_cv_struct_pthread_rw=yes, ac_cv_struct_pthread_rw=no) - if test "$ac_cv_struct_pthread_rw" = "no"; then - AC_TRY_COMPILE([#define _XOPEN_SOURCE 500 - #define _BSD_SOURCE - #define _SVID_SOURCE - #include <sys/types.h> - #include <pthread.h>], - [pthread_rwlock_t rwlock=PTHREAD_RWLOCK_INITIALIZER;], - ac_cv_struct_pthread_rw=yes, ac_cv_struct_pthread_rw=no) - if test "$ac_cv_struct_pthread_rw" = "yes"; then - APR_ADDTO(CPPFLAGS, [-D_XOPEN_SOURCE=500 -D_BSD_SOURCE]) - APR_ADDTO(CPPFLAGS, [-D_SVID_SOURCE]) - fi + ac_cv_struct_pthread_rw=yes, ac_cv_struct_pthread_rw=no) + if test "$ac_cv_struct_pthread_rw" = "yes"; then + APR_ADDTO(CPPFLAGS, [-D_XOPEN_SOURCE=500 -D_BSD_SOURCE]) + APR_ADDTO(CPPFLAGS, [-D_SVID_SOURCE]) fi fi fi @@ -971,7 +978,7 @@ # any POLL definitions. APR_CHECK_DEFINE_FILES(POLLIN, poll.h sys/poll.h) -if test "$threads" = "1"; then +if test "$pthreadh" = "1"; then APR_CHECK_DEFINE(PTHREAD_PROCESS_SHARED, pthread.h) AC_CHECK_FUNCS(pthread_mutexattr_setpshared) dnl Some systems have setpshared and define PROCESS_SHARED, but don't Index: include/arch/unix/locks.h =================================================================== RCS file: /home/cvs/apr/include/arch/unix/locks.h,v retrieving revision 1.36 diff -u -r1.36 locks.h --- include/arch/unix/locks.h 2001/07/19 00:11:56 1.36 +++ include/arch/unix/locks.h 2001/07/26 22:13:54 @@ -92,11 +92,8 @@ #ifdef HAVE_SYS_MMAN_H #include <sys/mman.h> #endif - -#if APR_HAS_THREADS #if APR_HAVE_PTHREAD_H #include <pthread.h> -#endif #endif /* End System Headers */