From 2e9c610931b4e0a6bab25b1fe5dbd0def45ee126 Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Sun, 9 Jan 2011 03:39:08 +0000 Subject: Fix memory leak in Python runtime integration. Reduce memory consumption of debug trace functions. Add trace points to help track the lifecycle of some of the runtime context objects. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1056880 13f79535-47bb-0310-9956-ffa450edef68 --- sca-cpp/trunk/modules/http/httpd-debug | 25 +++++++++++++++++++++++++ sca-cpp/trunk/modules/http/httpd-memgrind | 25 +++++++++++++++++++++++++ sca-cpp/trunk/modules/http/httpd-stop | 2 +- sca-cpp/trunk/modules/http/httpd.hpp | 4 ++++ sca-cpp/trunk/modules/http/mod-openauth.cpp | 1 + sca-cpp/trunk/modules/http/mod-ssltunnel.cpp | 7 ++++++- 6 files changed, 62 insertions(+), 2 deletions(-) create mode 100755 sca-cpp/trunk/modules/http/httpd-debug create mode 100755 sca-cpp/trunk/modules/http/httpd-memgrind (limited to 'sca-cpp/trunk/modules/http') diff --git a/sca-cpp/trunk/modules/http/httpd-debug b/sca-cpp/trunk/modules/http/httpd-debug new file mode 100755 index 0000000000..93a6bf81d4 --- /dev/null +++ b/sca-cpp/trunk/modules/http/httpd-debug @@ -0,0 +1,25 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# Start httpd server +here=`readlink -f $0`; here=`dirname $here` +root=`readlink -f $1` + +httpd=`cat $here/httpd.prefix` +$httpd/bin/httpd -X -E $root/logs/error_log -d $root -f $root/conf/httpd.conf diff --git a/sca-cpp/trunk/modules/http/httpd-memgrind b/sca-cpp/trunk/modules/http/httpd-memgrind new file mode 100755 index 0000000000..3219046c22 --- /dev/null +++ b/sca-cpp/trunk/modules/http/httpd-memgrind @@ -0,0 +1,25 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# Start httpd server +here=`readlink -f $0`; here=`dirname $here` +root=`readlink -f $1` + +httpd=`cat $here/httpd.prefix` +$here/../../etc/memgrind $httpd/bin/httpd -X -E $root/logs/error_log -d $root -f $root/conf/httpd.conf diff --git a/sca-cpp/trunk/modules/http/httpd-stop b/sca-cpp/trunk/modules/http/httpd-stop index 09ac5d035f..cadec1e6a0 100755 --- a/sca-cpp/trunk/modules/http/httpd-stop +++ b/sca-cpp/trunk/modules/http/httpd-stop @@ -22,4 +22,4 @@ here=`readlink -f $0`; here=`dirname $here` root=`readlink -f $1` apachectl=`cat $here/httpd-apachectl.prefix` -$apachectl -k graceful-stop -d $root -f $root/conf/httpd.conf +$apachectl -k graceful-stop -d $root -f $root/conf/httpd.conf 2>/dev/null diff --git a/sca-cpp/trunk/modules/http/httpd.hpp b/sca-cpp/trunk/modules/http/httpd.hpp index a222b38556..b6756c51e3 100644 --- a/sca-cpp/trunk/modules/http/httpd.hpp +++ b/sca-cpp/trunk/modules/http/httpd.hpp @@ -631,6 +631,7 @@ const char* debugOptional(const char* s) { * Log a header */ int debugHeader(unused void* r, const char* key, const char* value) { + gc_scoped_pool(); cdebug << " header key: " << key << ", value: " << value << endl; return 1; } @@ -639,6 +640,7 @@ int debugHeader(unused void* r, const char* key, const char* value) { * Log an environment variable */ int debugEnv(unused void* r, const char* key, const char* value) { + gc_scoped_pool(); cdebug << " var key: " << key << ", value: " << value << endl; return 1; } @@ -647,6 +649,7 @@ int debugEnv(unused void* r, const char* key, const char* value) { * Log a note. */ int debugNote(unused void* r, const char* key, const char* value) { + gc_scoped_pool(); cdebug << " note key: " << key << ", value: " << value << endl; return 1; } @@ -655,6 +658,7 @@ int debugNote(unused void* r, const char* key, const char* value) { * Log a request. */ const bool debugRequest(request_rec* r, const string& msg) { + gc_scoped_pool(); cdebug << msg << ":" << endl; cdebug << " unparsed uri: " << debugOptional(r->unparsed_uri) << endl; cdebug << " uri: " << debugOptional(r->uri) << endl; diff --git a/sca-cpp/trunk/modules/http/mod-openauth.cpp b/sca-cpp/trunk/modules/http/mod-openauth.cpp index 688f2b0ba8..6917c8862c 100644 --- a/sca-cpp/trunk/modules/http/mod-openauth.cpp +++ b/sca-cpp/trunk/modules/http/mod-openauth.cpp @@ -202,6 +202,7 @@ static int checkAuthn(request_rec *r) { if (atype == NULL || strcasecmp(atype, "Open")) return DECLINED; + // Create a scoped memory pool gc_scoped_pool pool(r->pool); httpdDebugRequest(r, "modopenauth::checkAuthn::input"); diff --git a/sca-cpp/trunk/modules/http/mod-ssltunnel.cpp b/sca-cpp/trunk/modules/http/mod-ssltunnel.cpp index d2c53b462e..edbc8f3b99 100644 --- a/sca-cpp/trunk/modules/http/mod-ssltunnel.cpp +++ b/sca-cpp/trunk/modules/http/mod-ssltunnel.cpp @@ -264,7 +264,9 @@ int processConnection(conn_rec *conn) { if (ap_get_module_config(conn->base_server->module_config, &mod_tuscany_ssltunnel) == NULL) return DECLINED; - gc_scoped_pool(conn->pool); + // Create a scoped memory pool + gc_scoped_pool pool; + const ServerConf& sc = httpd::serverConf(conn->base_server, &mod_tuscany_ssltunnel); if (length(sc.pass) == 0) return DECLINED; @@ -287,6 +289,9 @@ int handler(request_rec* r) { if (strcmp(r->server->server_scheme, "https")) return DECLINED; + // Create a scoped memory pool + gc_scoped_pool pool(r->pool); + // Build the target URL debug(r->uri, "modssltunnel::handler::uri"); const list path(pathValues(r->uri)); -- cgit v1.2.3