rbb         99/10/19 12:21:24

  Modified:    src/lib/apr acconfig.h configure.in
               src/lib/apr/file_io/unix dir.c
               src/lib/apr/network_io/unix sockets.c sockopt.c
               src/lib/apr/time/unix time.c
  Removed:     src/lib/apr/inc apr_macro.h
  Log:
  Remove all of the ugly SAFETY_LOCK code.  APR determines if it has threading
  support turned on.  If so, it uses re-entrant functions that should be there.
  If the functions aren't there, we use non-re-entrant functions.  If this
  causes problems in the future, we'll provide implementations of the
  re-entrant functions.  For now though, this should work, and it is definately
  cleaner than what we had before.
  
  Revision  Changes    Path
  1.9       +2 -0      apache-2.0/src/lib/apr/acconfig.h
  
  Index: acconfig.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/acconfig.h,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- acconfig.h        1999/10/18 09:44:07     1.8
  +++ acconfig.h        1999/10/19 19:20:58     1.9
  @@ -47,6 +47,8 @@
   #undef NEED_RLIM_T
   #undef USEBCOPY
   
  +#undef APR_HAS_THREADS
  +
   @BOTTOM@
   #define API_EXPORT(type) type
   #define API_EXPORT_NONSTD(type) type
  
  
  
  1.21      +22 -1     apache-2.0/src/lib/apr/configure.in
  
  Index: configure.in
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/configure.in,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- configure.in      1999/10/14 03:00:33     1.20
  +++ configure.in      1999/10/19 19:21:01     1.21
  @@ -179,7 +179,6 @@
   AC_CHECK_HEADERS(sys/types.h)
   AC_CHECK_HEADERS(sys/wait.h)
   
  -AC_CHECK_HEADERS(pthread.h)
   AC_CHECK_HEADERS(kernel/OS.h)
   
   dnl Checks for typedefs, structures, and compiler characteristics.
  @@ -209,6 +208,28 @@
   AC_CHECK_FUNC(_getch)
   
   AC_CHECK_FUNCS(gmtime_r localtime_r)
  +
  +AC_MSG_CHECKING(whether to enable thread support)
  +AC_ARG_ENABLE(threads,
  +[  --enable-threads  Enable threading support in APR.],
  +[
  +  if test "$enableval" = "no"; then 
  +    AC_DEFINE(APR_HAS_THREADS, 0)
  +    AC_MSG_RESULT(no)
  +  else
  +    if test "$enableval" = "pthread"; then
  +      AC_CHECK_HEADERS(pthread.h, [ AC_DEFINE(APR_HAS_THREADS, 1) ], [ 
AC_DEFINE(APR_HAS_THREADS, 0) ] )
  +      AC_MSG_RESULT(yes)
  +    else
  +      AC_MSG_RESULT(no)
  +    fi
  +  fi
  +],
  +[
  +  AC_CHECK_HEADERS(pthread.h, [ AC_DEFINE(APR_HAS_THREADS, 1) ], [ 
AC_DEFINE(APR_HAS_THREADS, 0) ] )
  +   
  +]) 
  +
   
   dnl Start building stuff from our information
   AC_SUBST(LDLIBS)
  
  
  
  1.10      +13 -8     apache-2.0/src/lib/apr/file_io/unix/dir.c
  
  Index: dir.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/dir.c,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- dir.c     1999/10/16 14:06:58     1.9
  +++ dir.c     1999/10/19 19:21:13     1.10
  @@ -58,15 +58,11 @@
   #include <string.h>
   #include <dirent.h>
   #include <sys/stat.h>
  -#include "apr_macro.h"
   #include "fileio.h"
   #include "apr_file_io.h"
   #include "apr_lib.h"
  -#include "apr_lock.h"
   #include "apr_portable.h"
   
  -static ap_lock_t *lock_readdir = NULL;
  -
   static ap_status_t dir_cleanup(void *thedir)
   {
       struct dir_t *dir = thedir;
  @@ -128,11 +124,20 @@
    */                        
   ap_status_t ap_readdir(struct dir_t *thedir)
   {
  +#if APR_HAS_THREADS && _POSIX_THREAD_SAFE_FUNCTIONS 
  +    return readdir_r(thedir->dirstruct, thedir->entry, &thedir->entry);
  +#else
  +    int save_errno;
       ap_status_t status;
  -    SAFETY_LOCK(readdir, "readdir_file");
  -    READDIR(thedir->dirstruct, thedir->entry, status);
  -    SAFETY_UNLOCK(readdir);
  -    return status;
  +
  +    thedir->entry = readdir(thedir->dirstruct);
  +    if (thedir->entry == NULL) {
  +        if (errno == save_errno) {
  +            return APR_SUCCESS;
  +        }
  +        return errno;
  +    }
  +#endif
   }
   
   /* ***APRDOC********************************************************
  
  
  
  1.18      +5 -10     apache-2.0/src/lib/apr/network_io/unix/sockets.c
  
  Index: sockets.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/unix/sockets.c,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- sockets.c 1999/10/16 14:07:00     1.17
  +++ sockets.c 1999/10/19 19:21:18     1.18
  @@ -58,7 +58,6 @@
   #include "apr_general.h"
   #include "apr_portable.h"
   #include "apr_lib.h"
  -#include "apr_macro.h"
   #include <errno.h>
   #include <string.h>
   #include <sys/socket.h>
  @@ -210,9 +209,8 @@
   ap_status_t ap_getipaddr(char *addr, ap_ssize_t len,
                         const struct socket_t *sock)
   {
  -    SAFETY_LOCK(inet, "inetfile");
  -    INET_NTOA(sock->addr->sin_addr, addr, len - 1);
  -    SAFETY_UNLOCK(inet);
  +    char *temp = inet_ntoa(sock->addr->sin_addr);
  +    ap_cpystrn(addr, temp, len - 1);
       return APR_SUCCESS;
   }
   
  @@ -293,24 +291,21 @@
   ap_status_t ap_connect(struct socket_t *sock, char *hostname)
   {
       struct hostent *hp;
  -    struct hostent *hp_safe;
   
       if (hostname != NULL) {
  -        SAFETY_LOCK(network, "net_file");
  -        GETHOSTBYNAME(hostname, hp, hp_safe);
  -        SAFETY_UNLOCK(network);
  +        hp = gethostbyname(hostname);
   
           if ((sock->socketdes < 0) || (!sock->addr)) {
               return APR_ENOTSOCK;
           }
  -        if (!hp_safe)  {
  +        if (!hp)  {
               if (h_errno == TRY_AGAIN) {
                   return EAGAIN;
               }
               return h_errno;
           }
       
  -        memcpy((char *)&sock->addr->sin_addr, hp_safe->h_addr_list[0], 
hp_safe->h_length);
  +        memcpy((char *)&sock->addr->sin_addr, hp->h_addr_list[0], 
hp->h_length);
   
           sock->addr_len = sizeof(*sock->addr);
       }
  
  
  
  1.10      +0 -9      apache-2.0/src/lib/apr/network_io/unix/sockopt.c
  
  Index: sockopt.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/unix/sockopt.c,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- sockopt.c 1999/10/16 14:07:00     1.9
  +++ sockopt.c 1999/10/19 19:21:20     1.10
  @@ -57,7 +57,6 @@
   #include "apr_network_io.h"
   #include "apr_general.h"
   #include "apr_lib.h"
  -#include "apr_macro.h"
   #include <errno.h>
   #include <string.h>
   #include <sys/socket.h>
  @@ -67,10 +66,6 @@
   #include <fcntl.h>
   #include <netdb.h>
   
  -#ifndef _POSIX_THREAD_SAFE_FUNCTIONS
  -extern ap_lock_t *lock_network;
  -#endif
  -
   static ap_status_t soblock(int sd)
   {
       int fd_flags;
  @@ -208,13 +203,9 @@
   ap_status_t ap_get_remote_hostname(char **name, struct socket_t *sock)
   {
       struct hostent *hptr;
  -    struct hostent *hp_safe;
       
  -    SAFETY_LOCK(network, "net_file");
  -    GETHOSTBYADDR((char *)&(sock->addr->sin_addr), hptr, hp_safe);
       hptr = gethostbyaddr((char *)&(sock->addr->sin_addr), 
                            sizeof(struct in_addr), AF_INET);
  -    SAFETY_UNLOCK(network);
       if (hptr != NULL) {
           *name = ap_pstrdup(sock->cntxt, hptr->h_name);
           if (*name) {
  
  
  
  1.10      +10 -12    apache-2.0/src/lib/apr/time/unix/time.c
  
  Index: time.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/time/unix/time.c,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- time.c    1999/10/16 12:52:07     1.9
  +++ time.c    1999/10/19 19:21:22     1.10
  @@ -58,16 +58,10 @@
   #include "apr_general.h"
   #include "apr_lib.h"
   #include "apr_portable.h"
  -#include "apr_macro.h"
   #include <time.h>
   #include <errno.h>
   #include <string.h>
   
  -#ifndef _POSIX_THREAD_SAFE_FUNCTIONS
  -static ap_lock_t *lock_time = NULL;
  -#endif
  -
  -
   /* ***APRDOC********************************************************
    * ap_status_t ap_make_time(ap_context_t *, ap_time_t *)
    *    Create a time entity.
  @@ -113,15 +107,19 @@
   {
       switch (type) {
       case APR_LOCALTIME: {
  -        SAFETY_LOCK(time, "timefile");
  -        LOCALTIME_R(&atime->currtime->tv_sec, atime->explodedtime);
  -        SAFETY_UNLOCK(time);
  +#if APR_HAS_THREADS && _POSIX_THREAD_SAFE_FUNCTIONS
  +        localtime_r(&atime->currtime->tv_sec, atime->explodedtime);
  +#else
  +        atime->explodedtime = localtime(&atime->currtime->tv_sec);
  +#endif
           break;
       }
       case APR_UTCTIME: {
  -        SAFETY_LOCK(time, "timefile");
  -        GMTIME_R(&atime->currtime->tv_sec, atime->explodedtime);
  -        SAFETY_UNLOCK(time);
  +#if APR_HAS_THREADS && _POSIX_THREAD_SAFE_FUNCTIONS
  +        gmtime_r(&atime->currtime->tv_sec, atime->explodedtime);
  +#else
  +        atime->explodedtime = gmtime(&atime->currtime->tv_sec);
  +#endif
           break;
       }
       }
  
  
  

Reply via email to