From: Jeff Trawick Date: Fri, 7 Nov 2003 15:26:34 +0000 (+0000) Subject: Fix a long delay with CGI requests and keepalive connections on X-Git-Tag: pre_ajp_proxy~1061 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c76efd6bfb45a0478e2cdbc3df447525dcfe067e;p=thirdparty%2Fapache%2Fhttpd.git Fix a long delay with CGI requests and keepalive connections on AIX. On AIX, for processes like mod_cgid's script children where SIGCHLD is ignored, kill(pid,0) returns success for up to one second after the script child exits, based on when a daemon runs to clean up unnecessary process table entries. getpgid() can report the proper info (-1/ESRCH) immediately. One user had a page with a lot of embedded images created by CGIs, and the browser fetched them on a keepalive connection, and the cumulative delays were very noticeable by the clients. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@101716 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 3e073e40271..44a0cb8505b 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,9 @@ Changes with Apache 2.1.0-dev [Remove entries to the current 2.0 section below, when backported] + *) Fix a long delay with CGI requests and keepalive connections on + AIX. [Jeff Trawick] + *) Fix uninitialized gprof directory name in prefork MPM. PR 24450. [Chris Knight ] diff --git a/modules/generators/mod_cgid.c b/modules/generators/mod_cgid.c index c37e86fee1e..233f3bfde2a 100644 --- a/modules/generators/mod_cgid.c +++ b/modules/generators/mod_cgid.c @@ -1187,7 +1187,17 @@ static apr_status_t dead_yet(pid_t pid, apr_interval_time_t max_wait) apr_interval_time_t total = 0; do { +#ifdef _AIX + /* On AIX, for processes like mod_cgid's script children where + * SIGCHLD is ignored, kill(pid,0) returns success for up to + * one second after the script child exits, based on when a + * daemon runs to clean up unnecessary process table entries. + * getpgid() can report the proper info (-1/ESRCH) immediately. + */ + if (getpgid(pid) < 0) { +#else if (kill(pid, 0) < 0) { +#endif return APR_SUCCESS; } apr_sleep(interval);