You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Dean Gaudet <dg...@arctic.org> on 1997/06/24 01:52:50 UTC

[PATCH] 1.2.x: create fd slack

Yup I was being foolish, I finally got myself a few 1.2.x trees to work
against. 

Dean

Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache/src/CHANGES,v
retrieving revision 1.286
diff -c -3 -r1.286 CHANGES
*** CHANGES	1997/06/05 09:32:46	1.286
--- CHANGES	1997/06/23 23:46:06
***************
*** 1,3 ****
--- 1,16 ----
+ Changes with Apache 1.2.1
+ 
+   *) Attempt to work around problems with third party libraries that do not
+      handle high numbered descriptors (examples include bind, and
+      solaris libc).  On all systems apache attempts to keep all permanent
+      descriptors above 15 (called the low slack line).  Solaris users
+      can also benefit from adding -DHIGH_SLACK_LINE=256 to EXTRA_CFLAGS
+      which keeps all non-FILE * descriptors above 255.  On all systems
+      this should make supporting large numbers of vhosts with many open
+      log files more feasible.  If this causes trouble please report it,
+      you can disable this workaround by adding -DNO_SLACK to EXTRA_CFLAGS.
+      [Dean Gaudet] various PRs
+ 
  Changes with Apache 1.2
  
  Changes with Apache 1.2b11
Index: PORTING
===================================================================
RCS file: /export/home/cvs/apache/src/PORTING,v
retrieving revision 1.4
diff -c -3 -r1.4 PORTING
*** PORTING	1997/02/25 21:04:42	1.4
--- PORTING	1997/06/23 23:46:07
***************
*** 227,232 ****
--- 227,235 ----
        NO_LINGCLOSE:
         Do not use Apache's soft, "lingering" close feature to
         terminate connections.
+       NO_SLACK:
+        Do not use the "slack" fd feature which requires a working fcntl
+        F_DUPFD.
  --
  
    MISC #DEFINES:
Index: alloc.c
===================================================================
RCS file: /export/home/cvs/apache/src/alloc.c,v
retrieving revision 1.28
diff -c -3 -r1.28 alloc.c
*** alloc.c	1997/05/27 04:14:20	1.28
--- alloc.c	1997/06/23 23:46:09
***************
*** 58,65 ****
   * rst --- 4/95 --- 6/95
   */
  
! #include "conf.h"
! #include "alloc.h"
  
  #include <stdarg.h>
  
--- 58,64 ----
   * rst --- 4/95 --- 6/95
   */
  
! #include "httpd.h"
  
  #include <stdarg.h>
  
***************
*** 801,807 ****
    block_alarms();
    fd = open(name, flg, mode);
    save_errno = errno;
!   if (fd >= 0) note_cleanups_for_fd (a, fd);
    unblock_alarms();
    errno = save_errno;
    return fd;
--- 800,809 ----
    block_alarms();
    fd = open(name, flg, mode);
    save_errno = errno;
!   if (fd >= 0) {
!     fd = ap_slack (fd, AP_SLACK_HIGH);
!     note_cleanups_for_fd (a, fd);
!   }
    unblock_alarms();
    errno = save_errno;
    return fd;
***************
*** 846,851 ****
--- 848,854 ----
      desc = open(name, baseFlag | O_APPEND | O_CREAT,
  		S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
      if (desc >= 0) {
+       desc = ap_slack(desc, AP_SLACK_LOW);
        fd = fdopen(desc, mode);
      }
    } else {
Index: conf.h
===================================================================
RCS file: /export/home/cvs/apache/src/conf.h,v
retrieving revision 1.99
diff -c -3 -r1.99 conf.h
*** conf.h	1997/06/04 07:03:11	1.99
--- conf.h	1997/06/23 23:46:11
***************
*** 73,78 ****
--- 73,79 ----
  extern void GETPRIVMODE();
  extern void GETUSERMODE();
  extern char *inet_ntoa();
+ #define NO_SLACK
  
  #elif defined(SUNOS4)
  #define HAVE_GMTOFF
Index: http_main.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_main.c,v
retrieving revision 1.149
diff -c -3 -r1.149 http_main.c
*** http_main.c	1997/05/29 04:50:27	1.149
--- http_main.c	1997/06/23 23:46:16
***************
*** 1981,1986 ****
--- 1981,1988 ----
          exit(1);
      }
  
+     s = ap_slack(s, AP_SLACK_HIGH);
+ 
      note_cleanups_for_fd(pconf, s); /* arrange to close on exec or restart */
      
  #ifndef MPE
Index: httpd.h
===================================================================
RCS file: /export/home/cvs/apache/src/httpd.h,v
retrieving revision 1.111
diff -c -3 -r1.111 httpd.h
*** httpd.h	1997/06/05 22:53:27	1.111
--- httpd.h	1997/06/23 23:46:18
***************
*** 268,273 ****
--- 268,274 ----
  #define DECLINED -1		/* Module declines to handle */
  #define OK 0			/* Module has handled this stage. */
  
+ 
  /* ----------------------- HTTP Status Codes  ------------------------- */
  
  #define RESPONSE_CODES 38
***************
*** 711,713 ****
--- 712,742 ----
  unsigned long get_virthost_addr (const char *hostname, unsigned short *port);
  
  extern time_t restart_time;
+ 
+ /*
+  * Apache tries to keep all of its long term filehandles (such as log files,
+  * and sockets) above this number.  This is to workaround problems in many
+  * third party libraries that are compiled with a small FD_SETSIZE.  There
+  * should be no reason to lower this, because it's only advisory.  If a file
+  * can't be allocated above this number then it will remain in the "slack"
+  * area.
+  *
+  * Only the low slack line is used by default.  If HIGH_SLACK_LINE is defined
+  * then an attempt is also made to keep all non-FILE * files above the high
+  * slack line.  This is to work around a Solaris C library limitation, where it
+  * uses an unsigned char to store the file descriptor.
+  */
+ #ifndef LOW_SLACK_LINE
+ #define LOW_SLACK_LINE	15
+ #endif
+ /* #define HIGH_SLACK_LINE	255 */
+ 
+ /*
+  * The ap_slack() function takes a fd, and tries to move it above the indicated
+  * line.  It returns an fd which may or may not have moved above the line, and
+  * never fails.  If the high line was requested and it fails it will also try
+  * the low line.
+  */
+ int ap_slack (int fd, int line);
+ #define AP_SLACK_LOW	1
+ #define AP_SLACK_HIGH	2
Index: util.c
===================================================================
RCS file: /export/home/cvs/apache/src/util.c,v
retrieving revision 1.52
diff -c -3 -r1.52 util.c
*** util.c	1997/04/12 04:24:59	1.52
--- util.c	1997/06/23 23:46:21
***************
*** 1326,1328 ****
--- 1326,1355 ----
      return (p);
  }
  #endif
+ 
+ 
+ int ap_slack (int fd, int line)
+ {
+ #if !defined(F_DUPFD) || defined(NO_SLACK)
+     return fd;
+ #else
+     int new_fd;
+ 
+ #ifdef HIGH_SLACK_LINE
+     if (line == AP_SLACK_HIGH) {
+ 	new_fd = fcntl (fd, F_DUPFD, HIGH_SLACK_LINE);
+ 	if (new_fd != -1) {
+ 	    close (fd);
+ 	    return new_fd;
+ 	}
+     }
+ #endif
+     /* otherwise just assume line == AP_SLACK_LOW */
+     new_fd = fcntl (fd, F_DUPFD, LOW_SLACK_LINE);
+     if (new_fd == -1) {
+       return fd;
+     }
+     close (fd);
+     return new_fd;
+ #endif
+ }



Re: [PATCH] 1.2.x: create fd slack

Posted by Dean Gaudet <dg...@arctic.org>.
Nah just hide it in mod_negotiation.  Put it about smack dab in the
middle.  I dunno about others, but I get lost in that module after the
first screen or two. 

Or hide it in regex. 

Dean

On Mon, 23 Jun 1997, Patrick Michael Kane wrote: 

> Quoting Alexei Kosut (akosut@nueva.pvt.k12.ca.us):
> > On Mon, 23 Jun 1997, Marc Slemko wrote:
> > 
> > > +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 
> > > +1 +1 +1                                                          +1 +1 +1 
> > > +1 +1 +1                         +1                               +1 +1 +1 
> > > +1 +1 +1                                                          +1 +1 +1 
> > > +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 
> > 
> > This reminds me... we should embed a little ASCII-based arcade-like
> > game in Apache as an "easter egg". Although I admit the effectiveness
> > of doing that is diminished with a program that comes with source...
> 
> A few tricks could be borrowed from the Obfuscated C folks to make it at
> least a _little_ challenging.
> 
> -- 
> Patrick Kane
> The Electronic Newsstand
> <mo...@enews.com>
> 
> - Nisi mihi pecuniam omnem dabis, caput tuum mehercule saxo frangam
> 


Re: [PATCH] 1.2.x: create fd slack

Posted by Patrick Michael Kane <mo...@enews.com>.
Quoting Alexei Kosut (akosut@nueva.pvt.k12.ca.us):
> On Mon, 23 Jun 1997, Marc Slemko wrote:
> 
> > +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 
> > +1 +1 +1                                                          +1 +1 +1 
> > +1 +1 +1                         +1                               +1 +1 +1 
> > +1 +1 +1                                                          +1 +1 +1 
> > +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 
> 
> This reminds me... we should embed a little ASCII-based arcade-like
> game in Apache as an "easter egg". Although I admit the effectiveness
> of doing that is diminished with a program that comes with source...

A few tricks could be borrowed from the Obfuscated C folks to make it at
least a _little_ challenging.

-- 
Patrick Kane
The Electronic Newsstand
<mo...@enews.com>

- Nisi mihi pecuniam omnem dabis, caput tuum mehercule saxo frangam

Re: [PATCH] 1.2.x: create fd slack

Posted by Dean Gaudet <dg...@arctic.org>.
On Mon, 23 Jun 1997, Marc Slemko wrote:

> On Mon, 23 Jun 1997, Dean Gaudet wrote:
> > + 
> 
> Did you mean to do that?

Yeah I wanted to see if you were paying attention :)

Committed to HEAD.  I'm still waiting until tomorrow for people to tell me
I'm way off base with how I want to proceed with 1.2.1.

I'm going to go commit a bunch of other voted on stuff to HEAD as well.

Dean


Re: [PATCH] 1.2.x: create fd slack

Posted by Alexei Kosut <ak...@nueva.pvt.k12.ca.us>.
On Mon, 23 Jun 1997, Marc Slemko wrote:

> +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 
> +1 +1 +1                                                          +1 +1 +1 
> +1 +1 +1                         +1                               +1 +1 +1 
> +1 +1 +1                                                          +1 +1 +1 
> +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 

This reminds me... we should embed a little ASCII-based arcade-like
game in Apache as an "easter egg". Although I admit the effectiveness
of doing that is diminished with a program that comes with source...

-- 
________________________________________________________________________
Alexei Kosut <ak...@nueva.pvt.k12.ca.us>      The Apache HTTP Server
URL: http://www.nueva.pvt.k12.ca.us/~akosut/   http://www.apache.org/


Re: [PATCH] 1.2.x: create fd slack

Posted by Marc Slemko <ma...@worldgate.com>.
On Mon, 23 Jun 1997, Dean Gaudet wrote:

> ===================================================================
> RCS file: /export/home/cvs/apache/src/httpd.h,v
> retrieving revision 1.111
> diff -c -3 -r1.111 httpd.h
> *** httpd.h	1997/06/05 22:53:27	1.111
> --- httpd.h	1997/06/23 23:46:18
> ***************
> *** 268,273 ****
> --- 268,274 ----
>   #define DECLINED -1		/* Module declines to handle */
>   #define OK 0			/* Module has handled this stage. */
>   
> + 
>   /* ----------------------- HTTP Status Codes  ------------------------- */
>   
>   #define RESPONSE_CODES 38

Did you mean to do that?

Other than that...

+1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 
+1 +1 +1                                                          +1 +1 +1 
+1 +1 +1                         +1                               +1 +1 +1 
+1 +1 +1                                                          +1 +1 +1 
+1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 


                                   ##
                                   ##
                                   ##
                                   ##
                                   ##
                                   ##
                                   ##
                        ########################
                                   ##
                                   ##
                                   ##
                                   ##
                                   ##
                                   ##
                                   ##
                  ##
                  ##                                     #
                  ##                                     ### 
                  ############################################
                  ############################################## 
                  ###############################################
                  ################################################# 
                  ################################################### 
                  ##
                  ##