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
##
##
##
##
##
##
##
########################
##
##
##
##
##
##
##
##
## #
## ###
############################################
##############################################
###############################################
#################################################
###################################################
##
##