You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by "William A. Rowe, Jr." <wr...@rowe-clan.net> on 2002/06/05 19:41:42 UTC
Re: [PATCH] - Add a "detached" parameter to
ap_cgi_build_command() for CGI...
Although win32 shares the same issue... still... ick...
Suppose it is time that we stuff the exec_info (renamed ap_exec_info_t) in
place
of the apr_cmdtype_e, and allow the ap_cgi_build_command() integrator to modify
any of the flags/fields in that structure?
Bill
At 12:10 PM 6/5/2002, Brad Nicholes wrote:
> This patch adds the "detached" parameter to the
>ap_cgi_build_command() optional function. This allows the OS to specify
>whether the CGI binary should be spawned detached or not. Specifically
>for NetWare this allows us to determine wheither a CGI NLM should be
>executed in the same address space as Apache or a new address space.
>
>Brad
>
>--- \tempapache\httpd-2.0\modules\generators\mod_cgi.h Wed Apr 17
>08:18:42 2002
>+++ mod_cgi.h Wed Jun 05 10:49:18 2002
>@@ -71,6 +71,7 @@
> * as a CGI invocation, otherwise false
> * @param type Set to APR_SHELLCMD or APR_PROGRAM on entry, may be
> * changed to invoke the program with alternate
>semantics.
>+ * @param detach Should the child start in detached state? Default is
>no.
> * @remark This callback may be registered by the os-specific module
> * to correct the command and arguments for apr_proc_create
>invocation
> * on a given os. mod_cgi will call the function if registered.
>@@ -78,6 +79,7 @@
> APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_cgi_build_command,
> (const char **cmd, const char ***argv,
> request_rec *r, apr_pool_t *p,
>- int process_cgi, apr_cmdtype_e *type));
>+ int process_cgi, apr_cmdtype_e *type,
>+ apr_int32_t *detach));
>
> #endif /* _MOD_CGI_H */
>
>--- \tempapache\httpd-2.0\modules\generators\mod_cgi.c Thu May 30
>08:49:40 2002
>+++ mod_cgi.c Wed Jun 05 10:50:04 2002
>@@ -110,6 +110,7 @@
> apr_int32_t out_pipe;
> apr_int32_t err_pipe;
> apr_cmdtype_e cmd_type;
>+ apr_int32_t detached;
> prog_types prog_type;
> apr_bucket_brigade **bb;
> include_ctx_t *ctx;
>@@ -471,7 +472,10 @@
> conf->limit_nproc)) !=
>APR_SUCCESS) ||
> #endif
> ((rc = apr_procattr_cmdtype_set(procattr,
>- e_info->cmd_type)) !=
>APR_SUCCESS)) {
>+ e_info->cmd_type)) !=
>APR_SUCCESS) ||
>+
>+ ((rc = apr_procattr_detach_set(procattr,
>+ e_info->detached)) !=
>APR_SUCCESS)) {
> /* Something bad happened, tell the world. */
> ap_log_rerror(APLOG_MARK, APLOG_ERR, rc, r,
> "couldn't set child process attributes: %s",
>r->filename);
>@@ -530,7 +534,8 @@
>
> static apr_status_t default_build_command(const char **cmd, const char
>***argv,
> request_rec *r, apr_pool_t
>*p,
>- int process_cgi,
>apr_cmdtype_e * type)
>+ int process_cgi,
>apr_cmdtype_e * type,
>+ apr_int32_t *detach)
> {
> int numwords, x, idx;
> char *w;
>@@ -665,6 +670,7 @@
> ap_add_common_vars(r);
>
> e_info.cmd_type = APR_PROGRAM;
>+ e_info.detached = 0;
> e_info.in_pipe = APR_CHILD_BLOCK;
> e_info.out_pipe = APR_CHILD_BLOCK;
> e_info.err_pipe = APR_CHILD_BLOCK;
>@@ -674,8 +680,8 @@
> e_info.next = NULL;
>
> /* build the command line */
>- if ((rv = cgi_build_command(&command, &argv, r, p, 1,
>&e_info.cmd_type))
>- != APR_SUCCESS) {
>+ if ((rv = cgi_build_command(&command, &argv, r, p, 1,
>&e_info.cmd_type,
>+ &e_info.detached)) != APR_SUCCESS) {
> ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
> "don't know how to spawn child process: %s",
> r->filename);
>@@ -940,6 +946,7 @@
> apr_status_t rv;
>
> e_info.cmd_type = APR_SHELLCMD;
>+ e_info.detached = 0;
> e_info.in_pipe = APR_NO_PIPE;
> e_info.out_pipe = APR_FULL_BLOCK;
> e_info.err_pipe = APR_NO_PIPE;
>@@ -949,7 +956,7 @@
> e_info.next = f->next;
>
> if ((rv = cgi_build_command(&command, &argv, r, r->pool, 0,
>- &e_info.cmd_type)) != APR_SUCCESS) {
>+ &e_info.cmd_type, &e_info.detached)) != APR_SUCCESS) {
> ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
> "don't know how to spawn cmd child process: %s",
>
> r->filename);
>
>
>
>Brad Nicholes
>Senior Software Engineer
>Novell, Inc., a leading provider of Net business solutions
>http://www.novell.com
>