ben 96/09/08 10:24:57
Modified: src CHANGES http_main.c
Log:
Fix race condition in wait_or_timeout (experimentally).
Revision Changes Path
1.61 +4 -1 apache/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache/src/CHANGES,v
retrieving revision 1.60
retrieving revision 1.61
diff -C3 -r1.60 -r1.61
*** CHANGES 1996/08/24 14:39:30 1.60
--- CHANGES 1996/09/08 17:24:55 1.61
***************
*** 1,6 ****
! $Id: CHANGES,v 1.60 1996/08/24 14:39:30 ben Exp $
Changes with Apache 1.2b1:
*) Configuration flags should be either "on" or "off". Apache was not
enforcing this restriction. Fixed. [Ben Laurie]
--- 1,9 ----
! $Id: CHANGES,v 1.61 1996/09/08 17:24:55 ben Exp $
Changes with Apache 1.2b1:
+
+ *) Fix a race condition which could cause the parent server to hang on
+ heavily loaded systems. [Ben Laurie]
*) Configuration flags should be either "on" or "off". Apache was not
enforcing this restriction. Fixed. [Ben Laurie]
1.66 +19 -1 apache/src/http_main.c
Index: http_main.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_main.c,v
retrieving revision 1.65
retrieving revision 1.66
diff -C3 -r1.65 -r1.66
*** http_main.c 1996/09/08 17:14:58 1.65
--- http_main.c 1996/09/08 17:24:55 1.66
***************
*** 50,56 ****
*
*/
! /* $Id: http_main.c,v 1.65 1996/09/08 17:14:58 ben Exp $ */
/*
* httpd.c: simple http daemon for answering WWW file requests
--- 50,56 ----
*
*/
! /* $Id: http_main.c,v 1.66 1996/09/08 17:24:55 ben Exp $ */
/*
* httpd.c: simple http daemon for answering WWW file requests
***************
*** 958,963 ****
--- 958,980 ----
* a while...
*/
+ #if 1
+
+ static int wait_or_timeout(int *status)
+ {
+ int ret;
+
+ ret=waitpid(-1,status,WNOHANG);
+ if(ret <= 0)
+ {
+ sleep(1);
+ return -1;
+ }
+ return ret;
+ }
+
+ #else
+
static JMP_BUF wait_timeout_buf;
static void longjmp_out_of_alarm (int sig) {
***************
*** 1001,1006 ****
--- 1018,1024 ----
return wait_or_timeout_retval;
}
+ #endif
/*****************************************************************
* Here follows a long bunch of generic server bookkeeping stuff...