apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Aaron Bannert <aa...@ebuilt.com>
Subject Re: [PATCH] Allow use of pthread related code without threads.
Date Thu, 26 Jul 2001 23:31:53 GMT
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 <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 */
>  


Mime
View raw message