dgaudet     97/10/27 11:10:38

  Modified:    src      CHANGES Configure PORTING
               src/main http_main.c
  Log:
  "Fix" PR#467 by generating a warning when the configuration/architecture
  demands it.
  
  PR:           467
  Reviewed by:  Paul Sutton, Jim Jagielski
  
  Revision  Changes    Path
  1.478     +4 -0      apachen/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/CHANGES,v
  retrieving revision 1.477
  retrieving revision 1.478
  diff -u -r1.477 -r1.478
  --- CHANGES   1997/10/27 19:06:21     1.477
  +++ CHANGES   1997/10/27 19:10:32     1.478
  @@ -1,5 +1,9 @@
   Changes with Apache 1.3b3
   
  +  *) PORT: "Fix" PR#467 by generating warnings on systems which we have
  +     not been able to get working USE_*_SERIALIZED_ACCEPT settings for.
  +     Document this a bit more in src/PORTING.  [Dean Gaudet] PR#467
  +
     *) Ensure that one copy of config warnings makes it to the
        error_log.  [Dean Gaudet]
   
  
  
  
  1.165     +1 -1      apachen/src/Configure
  
  Index: Configure
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/Configure,v
  retrieving revision 1.164
  retrieving revision 1.165
  diff -u -r1.164 -r1.165
  --- Configure 1997/10/25 23:28:04     1.164
  +++ Configure 1997/10/27 19:10:33     1.165
  @@ -532,7 +532,7 @@
   #
   if [ "$RULE_WANTHSREGEX" = "default" ]; then
        if [ "x$DEF_WANTHSREGEX" = "x" ]; then
  -             RULE_WANTHSREGEX=no
  +             RULE_WANTHSREGEX=yes
        else
                RULE_WANTHSREGEX=$DEF_WANTHSREGEX
        fi
  
  
  
  1.15      +25 -23    apachen/src/PORTING
  
  Index: PORTING
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/PORTING,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- PORTING   1997/10/25 05:34:41     1.14
  +++ PORTING   1997/10/27 19:10:34     1.15
  @@ -203,42 +203,44 @@
     These #defines are used for functions and ability that aren't exactly
     required but should be used.
   
  +     USE_LONGJMP:
  +      Define to use the longjmp() call instead of siglongjmp()
  +      (as well as setjmp() instead of sigsetjmp()).
  +
  +     USE_MMAP_FILES:
  +      Enable the use of mmap() for sending static files.
  +
  + USE_*_SERIALIZED_ACCEPT:
  +  See htdocs/manual/misc/perf-tuning.html for an in-depth discussion of
  +  why these are required.  These are choices for implementing a semaphore
  +  between children entering accept().  A complete port should define one
  +  of these, many may work and it's worthwhile timing them.  Without these
  +  the server will not implement multiple Listen directives reliably.
  +
        USE_FCNTL_SERIALIZED_ACCEPT:
  -      Define if the OS requires a mutex "lock" around the socket accept()
  -      call. Use fcntl() locking.  See htdocs/manual/misc/perf-tuning.html.
  +      Use fcntl() to implement the semaphore.
   
        USE_FLOCK_SERIALIZED_ACCEPT:
  -      Define if the OS requires a mutex "lock" around the socket accept()
  -      call. Use flock() locking (fcntl() is expensive on some OSs, esp.
  -      when using NFS).  See htdocs/manual/misc/perf-tuning.html.
  +      Use flock() to implement the semaphore (fcntl() is expensive on
  +      some OSs, esp.  when using NFS).
   
        USE_USLOCK_SERIALIZED_ACCEPT:
         Probably IRIX only: use uslock() to serialize, which is far faster
         on multiprocessor boxes (and far slower on uniprocessor, yay).
  -      See htdocs/manual/misc/perf-tuning.html.
   
        USE_SYSVSEM_SERIALIZED_ACCEPT:
  -      Use System V semaphores to serialize accept.  These are problematic
  -      in that they won't be cleaned up if apache is kill -9d, and there's
  -      the potential of a CGI causing a denial of service attack if it's
  -      running as the same uid as apache (i.e. suexec is recommended on
  -      public servers).
  -      See htdocs/manual/misc/perf-tuning.html.
  -     
  +      Use System V semaphores to implement the semaphore.  These are
  +      problematic in that they won't be cleaned up if apache is kill -9d,
  +      and there's the potential of a CGI causing a denial of service
  +      attack if it's running as the same uid as apache (i.e. suexec
  +      is recommended on public servers).  But they can be faster than
  +      either of fcntl() or flock() on some systems.
  +
        USE_PTHREAD_SERIALIZED_ACCEPT:
  -      Use POSIX mutexes to serialize accept.
  -      See htdocs/manual/misc/perf-tuning.html.
  +      Use POSIX mutexes to implement the semaphore.
   
        SAFE_UNSERIALIZED_ACCEPT:
         It's safe to unserialize single-socket accept().
  -      See htdocs/manual/misc/perf-tuning.html.
  -
  -     USE_LONGJMP:
  -      Define to use the longjmp() call instead of siglongjmp()
  -      (as well as setjmp() instead of sigsetjmp()).
  -
  -     USE_MMAP_FILES:
  -      Enable the use of mmap() for sending static files.
   
   --
   
  
  
  
  1.239     +17 -0     apachen/src/main/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/main/http_main.c,v
  retrieving revision 1.238
  retrieving revision 1.239
  diff -u -r1.238 -r1.239
  --- http_main.c       1997/10/27 19:06:23     1.238
  +++ http_main.c       1997/10/27 19:10:36     1.239
  @@ -609,11 +609,16 @@
   /* Default --- no serialization.  Other methods *could* go here,
    * as #elifs...
    */
  +#if !defined(MULTITHREAD)
  +/* Multithreaded systems don't complete between processes for
  + * the sockets. */
  +#define NO_SERIALIZED_ACCEPT
   #define accept_mutex_cleanup()
   #define accept_mutex_init(x)
   #define accept_mutex_on()
   #define accept_mutex_off()
   #endif
  +#endif
   
   /* On some architectures it's safe to do unserialized accept()s in the
    * single Listen case.  But it's never safe to do it in the case where
  @@ -2484,6 +2489,18 @@
       lr->next = listeners;
       head_listener = listeners;
       close_unused_listeners();
  +
  +#ifdef NO_SERIALIZED_ACCEPT
  +    /* warn them about the starvation problem if they're using multiple
  +     * sockets
  +     */
  +    if (listeners->next != listeners) {
  +     aplog_error(APLOG_MARK, APLOG_NOERRNO|APLOG_CRIT, NULL,
  +                 "You cannot use multiple Listens safely on your system, "
  +                 "proceeding anyway.  See src/PORTING, search for "
  +                 "SERIALIZED_ACCEPT.");
  +    }
  +#endif
   }
   
   
  
  
  

Reply via email to