Return-Path: Delivered-To: apmail-httpd-dev-archive@httpd.apache.org Received: (qmail 79381 invoked by uid 500); 8 Jan 2002 07:40:07 -0000 Mailing-List: contact dev-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@httpd.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list dev@httpd.apache.org Received: (qmail 79370 invoked from network); 8 Jan 2002 07:40:07 -0000 Date: Mon, 7 Jan 2002 23:40:15 -0800 From: Jos Backus To: dev@httpd.apache.org Cc: Justin Erenkrantz , Ryan Bloom , Aaron Bannert , Michael Handler Subject: Re: Running Apache in the foreground Message-ID: <20020108074037.GB99625@lizzy.bugworks.com> Reply-To: Jos Backus Mail-Followup-To: dev@httpd.apache.org, Justin Erenkrantz , Ryan Bloom , Aaron Bannert , Michael Handler References: <20020102175716.A26288@monster.grendel.net> <20020103082814.S1529@clove.org> <20020104235946.GA61672@lizzy.bugworks.com> <20020107051112.037CA46E02@koj.rkbloom.net> <20020107062834.GO90171@lizzy.bugworks.com> <20020108065322.GA99625@lizzy.bugworks.com> <20020108065448.GJ14870@ebuilt.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20020108065448.GJ14870@ebuilt.com> User-Agent: Mutt/1.3.25i X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N On Mon, Jan 07, 2002 at 10:54:48PM -0800, Justin Erenkrantz wrote: > Precisely my thoughts. IMHO, split it out. (The name is a bit > iffy, but we can work on that...) -- justin Suggestions for a better name welcome :) Patch below. Btw, it appears that the current code in CVS does not build on FreeBSD -current: /bin/sh /home/jos/src/apache2/httpd-2.0/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -DHAVE_CONFIG_H -D_REENTRANT -D_THREAD_SAFE -I/home/jos/src/apache2/httpd-2.0/srclib/apr-util/include -I/home/jos/src/apache2/httpd-2.0/srclib/apr-util/include -I/home/jos/src/apache2/httpd-2.0/srclib/apr/include -c apr_rmm.c && touch apr_rmm.lo In file included from /home/jos/src/apache2/httpd-2.0/srclib/apr-util/include/apr_rmm.h:71, from apr_rmm.c:56: /home/jos/src/apache2/httpd-2.0/srclib/apr-util/include/apr_anylock.h:76: syntax error before `apr_thread_mutex_t' apr_rmm.c: In function `apr_rmm_init': apr_rmm.c:216: union has no member named `rw' apr_rmm.c:219: union has no member named `tm' apr_rmm.c:219: union has no member named `rw' apr_rmm.c:219: union has no member named `rw' apr_rmm.c:238: union has no member named `tm' apr_rmm.c:238: union has no member named `rw' apr_rmm.c: In function `apr_rmm_destroy': apr_rmm.c:247: union has no member named `tm' apr_rmm.c:247: union has no member named `rw' apr_rmm.c:247: union has no member named `rw' apr_rmm.c:272: union has no member named `tm' apr_rmm.c:272: union has no member named `rw' apr_rmm.c: In function `apr_rmm_attach': apr_rmm.c:283: union has no member named `rw' apr_rmm.c: In function `apr_rmm_malloc': apr_rmm.c:307: union has no member named `tm' apr_rmm.c:307: union has no member named `rw' apr_rmm.c:307: union has no member named `rw' apr_rmm.c:317: union has no member named `tm' apr_rmm.c:317: union has no member named `rw' apr_rmm.c: In function `apr_rmm_calloc': apr_rmm.c:326: union has no member named `tm' apr_rmm.c:326: union has no member named `rw' apr_rmm.c:326: union has no member named `rw' apr_rmm.c:337: union has no member named `tm' apr_rmm.c:337: union has no member named `rw' apr_rmm.c: In function `apr_rmm_free': apr_rmm.c:357: union has no member named `tm' apr_rmm.c:357: union has no member named `rw' apr_rmm.c:357: union has no member named `rw' apr_rmm.c:363: union has no member named `tm' apr_rmm.c:363: union has no member named `rw' apr_rmm.c:369: union has no member named `tm' apr_rmm.c:369: union has no member named `rw' apr_rmm.c:377: union has no member named `tm' apr_rmm.c:377: union has no member named `rw' apr_rmm.c:386: union has no member named `tm' apr_rmm.c:386: union has no member named `rw' *** Error code 1 Stop in /home/jos/src/apache2/httpd-2.0/srclib/apr-util/misc. *** Error code 1 Stop in /home/jos/src/apache2/httpd-2.0/srclib/apr-util/misc. *** Error code 1 Stop in /home/jos/src/apache2/httpd-2.0/srclib/apr-util. *** Error code 1 Stop in /home/jos/src/apache2/httpd-2.0/srclib. *** Error code 1 Stop in /home/jos/src/apache2/httpd-2.0. Index: server/mpm/beos/beos.c =================================================================== RCS file: /home/cvspublic/httpd-2.0/server/mpm/beos/beos.c,v retrieving revision 1.75 diff -u -r1.75 beos.c --- server/mpm/beos/beos.c 29 Dec 2001 23:16:23 -0000 1.75 +++ server/mpm/beos/beos.c 8 Jan 2002 07:36:34 -0000 @@ -1009,8 +1009,11 @@ if (restart_num++ == 1) { is_graceful = 0; - if (!one_process && !no_detach) - apr_proc_detach(); + if (!one_process) + if (no_detach) + apr_proc_new_sessid(); + else + apr_proc_detach(); server_pid = getpid(); } Index: server/mpm/perchild/perchild.c =================================================================== RCS file: /home/cvspublic/httpd-2.0/server/mpm/perchild/perchild.c,v retrieving revision 1.97 diff -u -r1.97 perchild.c --- server/mpm/perchild/perchild.c 29 Dec 2001 23:16:23 -0000 1.97 +++ server/mpm/perchild/perchild.c 8 Jan 2002 07:36:36 -0000 @@ -1433,9 +1433,8 @@ debug = ap_exists_config_define("DEBUG"); - if (debug) { + if (debug) no_detach = one_process = 1; - } else { one_process = ap_exists_config_define("ONE_PROCESS"); no_detach = ap_exists_config_define("NO_DETACH"); @@ -1445,9 +1444,11 @@ if (restart_num++ == 1) { is_graceful = 0; - if (!one_process && !no_detach) { - apr_proc_detach(); - } + if (!one_process) + if (no_detach) + apr_proc_new_sessid(); + else + apr_proc_detach(); my_pid = getpid(); } Index: server/mpm/prefork/prefork.c =================================================================== RCS file: /home/cvspublic/httpd-2.0/server/mpm/prefork/prefork.c,v retrieving revision 1.227 diff -u -r1.227 prefork.c --- server/mpm/prefork/prefork.c 29 Dec 2001 23:16:24 -0000 1.227 +++ server/mpm/prefork/prefork.c 8 Jan 2002 07:36:37 -0000 @@ -1216,9 +1216,11 @@ if (restart_num++ == 1) { is_graceful = 0; - if (!one_process && !no_detach) { - apr_proc_detach(); - } + if (!one_process) + if (no_detach) + apr_proc_new_sessid(); + else + apr_proc_detach(); parent_pid = ap_my_pid = getpid(); } Index: server/mpm/worker/worker.c =================================================================== RCS file: /home/cvspublic/httpd-2.0/server/mpm/worker/worker.c,v retrieving revision 1.58 diff -u -r1.58 worker.c --- server/mpm/worker/worker.c 29 Dec 2001 23:16:24 -0000 1.58 +++ server/mpm/worker/worker.c 8 Jan 2002 07:36:39 -0000 @@ -1596,9 +1596,12 @@ if (restart_num++ == 1) { is_graceful = 0; - if (!one_process && !no_detach) { - apr_proc_detach(); - } + if (!one_process) + if (no_detach) + apr_proc_new_sessid(); + else + apr_proc_detach(); + parent_pid = ap_my_pid = getpid(); } Index: srclib/apr/include/apr_thread_proc.h =================================================================== RCS file: /home/cvspublic/apr/include/apr_thread_proc.h,v retrieving revision 1.78 diff -u -r1.78 apr_thread_proc.h --- srclib/apr/include/apr_thread_proc.h 27 Dec 2001 17:02:59 -0000 1.78 +++ srclib/apr/include/apr_thread_proc.h 8 Jan 2002 07:36:40 -0000 @@ -550,6 +550,11 @@ apr_pool_t *p); /** + * Put the process in its own process group. + */ +APR_DECLARE(apr_status_t) apr_proc_new_sessid(void); + +/** * Detach the process from the controlling terminal. */ APR_DECLARE(apr_status_t) apr_proc_detach(void); Index: srclib/apr/threadproc/netware/procsup.c =================================================================== RCS file: /home/cvspublic/apr/threadproc/netware/procsup.c,v retrieving revision 1.1 diff -u -r1.1 procsup.c --- srclib/apr/threadproc/netware/procsup.c 2 Aug 2001 20:29:14 -0000 1.1 +++ srclib/apr/threadproc/netware/procsup.c 8 Jan 2002 07:36:40 -0000 @@ -54,25 +54,11 @@ #include "threadproc.h" -apr_status_t apr_proc_detach(void) +apr_status_t apr_proc_new_sessid(void) { #if 0 - int x; pid_t pgrp; - chdir("/"); -#if !defined(MPE) && !defined(OS2) && !defined(TPF) && !defined(BEOS) -/* Don't detach for MPE because child processes can't survive the death of - the parent. */ - if ((x = fork()) > 0) - exit(0); - else if (x == -1) { - perror("fork"); - fprintf(stderr, "unable to fork new process\n"); - exit(1); /* we can't do anything here, so just exit. */ - } -/* RAISE_SIGSTOP(DETACH);*/ -#endif #if APR_HAVE_SETSID if ((pgrp = setsid()) == -1) { return errno; @@ -90,6 +76,31 @@ #else if ((pgrp = setpgid(0, 0)) == -1) { return errno; + } +#endif + + return APR_SUCCESS; +} +apr_status_t apr_proc_detach(void) +{ +#if 0 + int x; + + chdir("/"); +#if !defined(MPE) && !defined(OS2) && !defined(TPF) && !defined(BEOS) +/* Don't detach for MPE because child processes can't survive the death of + the parent. */ + if ((x = fork()) > 0) + exit(0); + else if (x == -1) { + perror("fork"); + fprintf(stderr, "unable to fork new process\n"); + exit(1); /* we can't do anything here, so just exit. */ + } +/* RAISE_SIGSTOP(DETACH);*/ +#endif + if ((x = apr_proc_new_sessid()) != APR_SUCCESS) { + return x; } #endif Index: srclib/apr/threadproc/os2/proc.c =================================================================== RCS file: /home/cvspublic/apr/threadproc/os2/proc.c,v retrieving revision 1.47 diff -u -r1.47 proc.c --- srclib/apr/threadproc/os2/proc.c 26 Oct 2001 02:31:04 -0000 1.47 +++ srclib/apr/threadproc/os2/proc.c 8 Jan 2002 07:36:40 -0000 @@ -618,9 +618,12 @@ return APR_SUCCESS; } +APR_DECLARE(apr_status_t) apr_proc_new_sessid(void) +{ + return APR_ENOTIMPL; +} - -APR_DECLARE(apr_status_t) apr_proc_detach() +APR_DECLARE(apr_status_t) apr_proc_detach(void) { return APR_ENOTIMPL; } Index: srclib/apr/threadproc/unix/procsup.c =================================================================== RCS file: /home/cvspublic/apr/threadproc/unix/procsup.c,v retrieving revision 1.33 diff -u -r1.33 procsup.c --- srclib/apr/threadproc/unix/procsup.c 28 Dec 2001 19:03:48 -0000 1.33 +++ srclib/apr/threadproc/unix/procsup.c 8 Jan 2002 07:36:41 -0000 @@ -54,24 +54,10 @@ #include "threadproc.h" -APR_DECLARE(apr_status_t) apr_proc_detach(void) +APR_DECLARE(apr_status_t) apr_proc_new_sessid(void) { - int x; pid_t pgrp; - chdir("/"); -#if !defined(MPE) && !defined(OS2) && !defined(TPF) && !defined(BEOS) -/* Don't detach for MPE because child processes can't survive the death of - the parent. */ - if ((x = fork()) > 0) - exit(0); - else if (x == -1) { - perror("fork"); - fprintf(stderr, "unable to fork new process\n"); - exit(1); /* we can't do anything here, so just exit. */ - } -/* RAISE_SIGSTOP(DETACH);*/ -#endif #ifdef HAVE_SETSID if ((pgrp = setsid()) == -1) { return errno; @@ -91,6 +77,31 @@ return errno; } #endif + + return APR_SUCCESS; +} + +APR_DECLARE(apr_status_t) apr_proc_detach(void) +{ + int x; + + chdir("/"); +#if !defined(MPE) && !defined(OS2) && !defined(TPF) && !defined(BEOS) +/* Don't detach for MPE because child processes can't survive the death of + the parent. */ + if ((x = fork()) > 0) + exit(0); + else if (x == -1) { + perror("fork"); + fprintf(stderr, "unable to fork new process\n"); + exit(1); /* we can't do anything here, so just exit. */ + } +/* RAISE_SIGSTOP(DETACH);*/ +#endif + + if ((x = apr_proc_new_sessid()) != APR_SUCCESS) { + return x; + } /* close out the standard file descriptors */ if (freopen("/dev/null", "r", stdin) == NULL) { -- Jos Backus _/ _/_/_/ Santa Clara, CA _/ _/ _/ _/ _/_/_/ _/ _/ _/ _/ josb@cncdsl.com _/_/ _/_/_/ use Std::Disclaimer;