Return-Path: Delivered-To: apmail-apr-dev-archive@apr.apache.org Received: (qmail 60418 invoked by uid 500); 26 Jul 2001 23:32:12 -0000 Mailing-List: contact dev-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Delivered-To: mailing list dev@apr.apache.org Received: (qmail 60406 invoked from network); 26 Jul 2001 23:32:12 -0000 Date: Thu, 26 Jul 2001 16:31:53 -0700 From: Aaron Bannert To: dev@apr.apache.org Subject: Re: [PATCH] Allow use of pthread related code without threads. Message-ID: <20010726163153.P30268@ebuilt.com> References: <20010726152123.A18499@ebuilt.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <20010726152123.A18499@ebuilt.com>; from jerenkrantz@ebuilt.com on Thu, Jul 26, 2001 at 03:21:23PM -0700 X-AntiVirus: scanned for viruses by AMaViS 0.2.1-pre3 (http://amavis.org/) X-Spam-Rating: h31.sny.collab.net 1.6.2 0/1000/N Does having threads mean we require _REENTRANT to be defined (on Solaris)? My followup to that question is: does having _REENTRANT defined change the way anything operates in a way that we aren't expecting? -aaron On Thu, Jul 26, 2001 at 03:21:23PM -0700, Justin Erenkrantz wrote: > 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 > - #include ], > + 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 > + #include ], > + [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 > + #include ], > [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 > - #include ], > - [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 > #endif > - > -#if APR_HAS_THREADS > #if APR_HAVE_PTHREAD_H > #include > -#endif > #endif > /* End System Headers */ >