From 2f0029b5414830346b1739dd25921aed8e6eb91e Mon Sep 17 00:00:00 2001 From: Jeff Trawick Date: Thu, 29 Mar 2001 03:23:44 +0000 Subject: [PATCH] oops... really fix the storage leak this time... we were doing cleanups after the last change, but we were losing the pool and its retained storage git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@88612 13f79535-47bb-0310-9956-ffa450edef68 --- modules/generators/mod_cgid.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/modules/generators/mod_cgid.c b/modules/generators/mod_cgid.c index 967d7979f4..4dc47f6cfb 100644 --- a/modules/generators/mod_cgid.c +++ b/modules/generators/mod_cgid.c @@ -442,10 +442,13 @@ static int cgid_server(void *data) int sd, sd2, rc, req_type; mode_t omask; apr_socklen_t len; + apr_pool_t *ptrans; server_rec *main_server = data; cgid_server_conf *sconf = ap_get_module_config(main_server->module_config, &cgid_module); + apr_pool_create(&ptrans, pcgi); + apr_signal(SIGCHLD, SIG_IGN); if (unlink(sconf->sockname) < 0 && errno != ENOENT) { ap_log_error(APLOG_MARK, APLOG_ERR, errno, main_server, @@ -499,12 +502,13 @@ static int cgid_server(void *data) apr_int32_t out_pipe = APR_CHILD_BLOCK; apr_int32_t err_pipe = APR_CHILD_BLOCK; apr_cmdtype_e cmd_type = APR_PROGRAM; - apr_pool_t *p; request_rec *r; apr_procattr_t *procattr = NULL; apr_proc_t *procnew = NULL; apr_file_t *inout; + apr_pool_clear(ptrans); + len = sizeof(unix_addr); sd2 = accept(sd, (struct sockaddr *)&unix_addr, &len); if (sd2 < 0) { @@ -516,11 +520,9 @@ static int cgid_server(void *data) continue; } - apr_pool_create(&p, pcgi); - - r = apr_pcalloc(p, sizeof(request_rec)); - procnew = apr_pcalloc(p, sizeof(*procnew)); - r->pool = p; + r = apr_pcalloc(ptrans, sizeof(request_rec)); + procnew = apr_pcalloc(ptrans, sizeof(*procnew)); + r->pool = ptrans; get_req(sd2, r, &argv0, &env, &req_type); apr_os_file_put(&r->server->error_log, &errfileno, r->pool); apr_os_file_put(&inout, &sd2, r->pool); @@ -532,7 +534,7 @@ static int cgid_server(void *data) cmd_type = APR_SHELLCMD; } - if (((rc = apr_procattr_create(&procattr, p)) != APR_SUCCESS) || + if (((rc = apr_procattr_create(&procattr, ptrans)) != APR_SUCCESS) || ((req_type == CGI_REQ) && (((rc = apr_procattr_io_set(procattr, in_pipe, @@ -566,7 +568,7 @@ static int cgid_server(void *data) rc = ap_os_create_privileged_process(r, procnew, argv0, argv, (const char * const *)env, - procattr, p); + procattr, ptrans); if (rc != APR_SUCCESS) { /* Bad things happened. Everyone should have cleaned up. */ @@ -574,7 +576,6 @@ static int cgid_server(void *data) "couldn't create child process: %d: %s", rc, r->filename); } } - apr_pool_clear(p); } return -1; } -- 2.40.0