diff options
Diffstat (limited to 'sca-cpp')
24 files changed, 158 insertions, 17 deletions
diff --git a/sca-cpp/trunk/components/cache/memcache.hpp b/sca-cpp/trunk/components/cache/memcache.hpp index a76af6b662..e4cdceb6fa 100644 --- a/sca-cpp/trunk/components/cache/memcache.hpp +++ b/sca-cpp/trunk/components/cache/memcache.hpp @@ -49,24 +49,30 @@ namespace memcache { class MemCached { public: MemCached() : owner(false) { + debug("memcache::memcached"); } MemCached(const string host, const int port) : owner(true) { + debug(host, "memcache::memcached::host"); + debug(port, "memcache::memcached::port"); apr_pool_create(&pool, NULL); apr_memcache_create(pool, 1, 0, &mc); addServer(host, port); } MemCached(const list<string>& servers) : owner(true) { + debug(servers, "memcache::memcached::servers"); apr_pool_create(&pool, NULL); apr_memcache_create(pool, 1, 0, &mc); addServers(servers); } MemCached(const MemCached& c) : owner(false), pool(c.pool), mc(c.mc) { + debug("memcache::memcached::copy"); } ~MemCached() { + debug("memcache::~memcached"); if (!owner) return; apr_pool_destroy(pool); diff --git a/sca-cpp/trunk/components/chat/xmpp.hpp b/sca-cpp/trunk/components/chat/xmpp.hpp index 3a6aa86c5c..cafe342f05 100644 --- a/sca-cpp/trunk/components/chat/xmpp.hpp +++ b/sca-cpp/trunk/components/chat/xmpp.hpp @@ -45,11 +45,13 @@ namespace chat { class XMPPRuntime { public: XMPPRuntime() { + debug("chat::xmppruntime"); xmpp_initialize(); log = xmpp_get_default_logger(XMPP_LEVEL_DEBUG); } ~XMPPRuntime() { + debug("chat::~xmppruntime"); xmpp_shutdown(); } @@ -67,12 +69,15 @@ public: XMPPClient(const string& jid, const string& pass, bool owner = true) : owner(owner), ctx(xmpp_ctx_new(NULL, xmppRuntime.log)), conn(xmpp_conn_new(ctx)), connecting(false), connected(false), disconnecting(false) { xmpp_conn_set_jid(conn, c_str(jid + "/" + mkuuid())); xmpp_conn_set_pass(conn, c_str(pass)); + debug(jid, "chat::xmppclient::jid"); } XMPPClient(const XMPPClient& xc) : owner(false), ctx(xc.ctx), conn(xc.conn), listener(xc.listener), connecting(xc.connecting), connected(xc.connected), disconnecting(xc.disconnecting) { + debug("chat::xmppclient::copy"); } ~XMPPClient() { + debug("chat::~xmppclient"); extern const failable<bool> disconnect(XMPPClient& xc); if (!owner) return; diff --git a/sca-cpp/trunk/components/filedb/filedb.hpp b/sca-cpp/trunk/components/filedb/filedb.hpp index 89ff3b8157..39c8aff868 100644 --- a/sca-cpp/trunk/components/filedb/filedb.hpp +++ b/sca-cpp/trunk/components/filedb/filedb.hpp @@ -45,15 +45,20 @@ namespace filedb { class FileDB { public: FileDB() : owner(false), jscx(*jscontext("")) { + debug("filedb::filedb"); } FileDB(const string& name, const string& format) : owner(true), name(name), format(format), jscx(*jscontext(format)) { + debug(name, "filedb::filedb::name"); + debug(format, "filedb::filedb::format"); } FileDB(const FileDB& c) : owner(false), name(c.name), format(c.format), jscx(c.jscx) { + debug("filedb::filedb::copy"); } ~FileDB() { + debug("filedb::~filedb"); } private: diff --git a/sca-cpp/trunk/components/log/scribe.hpp b/sca-cpp/trunk/components/log/scribe.hpp index 5237bd0183..1e0ce46511 100644 --- a/sca-cpp/trunk/components/log/scribe.hpp +++ b/sca-cpp/trunk/components/log/scribe.hpp @@ -65,18 +65,23 @@ namespace scribe { class Scribe { public: Scribe() : owner(false) { + debug("scribe::scribe"); } Scribe(const string host, const int port) : owner(true) { + debug(host, "scribe::scribe::host"); + debug(port, "scribe::scribe::port"); init(host, port); } Scribe(const Scribe& c) : owner(false) { + debug("scribe::scribe::copy"); client = c.client; transport = c.transport; } ~Scribe() { + debug("scribe::~scribe"); if (!owner) return; try { diff --git a/sca-cpp/trunk/components/nosqldb/tinycdb.hpp b/sca-cpp/trunk/components/nosqldb/tinycdb.hpp index 0fab1a9854..e26001dc59 100644 --- a/sca-cpp/trunk/components/nosqldb/tinycdb.hpp +++ b/sca-cpp/trunk/components/nosqldb/tinycdb.hpp @@ -95,18 +95,22 @@ const bool free(const buffer&b) { class TinyCDB { public: TinyCDB() : owner(false), fd(-1) { + debug("tinycdb::tinycdb"); st.st_ino = 0; } TinyCDB(const string& name) : owner(true), name(name), fd(-1) { + debug(name, "tinycdb::tinycdb::name"); st.st_ino = 0; } TinyCDB(const TinyCDB& c) : owner(false), name(c.name), fd(c.fd) { + debug("tinycdb::tinycdb::copy"); st.st_ino = c.st.st_ino; } ~TinyCDB() { + debug("tinycdb::~tinycdb"); if (!owner) return; if (fd == -1) diff --git a/sca-cpp/trunk/components/queue/qpid.hpp b/sca-cpp/trunk/components/queue/qpid.hpp index 2651e3a433..4fb4c7a1bd 100644 --- a/sca-cpp/trunk/components/queue/qpid.hpp +++ b/sca-cpp/trunk/components/queue/qpid.hpp @@ -52,17 +52,21 @@ namespace queue { class QpidConnection { public: QpidConnection() : owner(true) { + debug("queue::qpidonnection"); c.open("localhost", 5672); } QpidConnection(const bool owner) : owner(owner) { + debug("queue::qpidonnection"); c.open("localhost", 5672); } QpidConnection(const QpidConnection& qc) : owner(false), c(qc.c) { + debug("queue::qpidonnection::copy"); } ~QpidConnection() { + debug("queue::~qpidonnection"); if (!owner) return; c.close(); @@ -91,15 +95,19 @@ const failable<bool> close(QpidConnection& qc) { class QpidSession { public: QpidSession(QpidConnection& qc) : owner(true), s(qc.c.newSession()) { + debug("queue::qpidsession"); } QpidSession(QpidConnection& qc, const bool owner) : owner(owner), s(qc.c.newSession()) { + debug("queue::qpidsession"); } QpidSession(const QpidSession& qs) : owner(false), s(qs.s) { + debug("queue::qpidsession::copy"); } ~QpidSession() { + debug("queue::~qpidsession"); if (!owner) return; s.close(); diff --git a/sca-cpp/trunk/components/sqldb/pgsql.hpp b/sca-cpp/trunk/components/sqldb/pgsql.hpp index f4da8db220..7dca38b086 100644 --- a/sca-cpp/trunk/components/sqldb/pgsql.hpp +++ b/sca-cpp/trunk/components/sqldb/pgsql.hpp @@ -55,9 +55,12 @@ const string pgfailure(PGresult* r, PGconn* conn) { class PGSql { public: PGSql() : owner(false) { + debug("pgsql::pgsql"); } PGSql(const string& conninfo, const string& table) : owner(true), conn(NULL), conninfo(conninfo), table(table) { + debug(conninfo, "pgsql::pgsql::conninfo"); + debug(table, "pgsql::pgsql::table"); conn = PQconnectdb(c_str(conninfo)); if (PQstatus(conn) != CONNECTION_OK) { mkfailure<bool>(string("Could not connect to postgresql database: ") + PQerrorMessage(conn)); @@ -67,9 +70,11 @@ public: } PGSql(const PGSql& c) : owner(false), conn(c.conn), conninfo(c.conninfo), table(c.table) { + debug("pgsql::pgsql::copy"); } ~PGSql() { + debug("pgsql::~pgsql"); if (!owner) return; if (conn == NULL) diff --git a/sca-cpp/trunk/components/webservice/axis2.hpp b/sca-cpp/trunk/components/webservice/axis2.hpp index c2886edb71..47813ccd6d 100644 --- a/sca-cpp/trunk/components/webservice/axis2.hpp +++ b/sca-cpp/trunk/components/webservice/axis2.hpp @@ -58,15 +58,19 @@ namespace webservice { class Axis2Context { public: Axis2Context() : env(axutil_env_create_all("axis2.log", AXIS2_LOG_LEVEL_WARNING)), owner(true) { + debug("webservice::axis2context"); } Axis2Context(const Axis2Context& ax) : env(ax.env), owner(false) { + debug("webservice::axis2context::copy"); } Axis2Context(const axutil_env_t* env) : env(const_cast<axutil_env_t*>(env)), owner(false) { + debug("webservice::axis2context::env"); } ~Axis2Context() { + debug("webservice::~axis2context"); if (!owner || env == NULL) return; axutil_env_free(env); diff --git a/sca-cpp/trunk/etc/memgrind b/sca-cpp/trunk/etc/memgrind index 1a220cd5d2..6fbb76bc30 100755 --- a/sca-cpp/trunk/etc/memgrind +++ b/sca-cpp/trunk/etc/memgrind @@ -19,5 +19,5 @@ # Run valgrind to analyze memory usage and track memory leaks -valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes $* 2>&1 | tee memgrind.log +valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=40 --track-fds=yes $* 2>&1 | tee memgrind.log diff --git a/sca-cpp/trunk/kernel/config.hpp b/sca-cpp/trunk/kernel/config.hpp index 195612428e..f700829fa5 100644 --- a/sca-cpp/trunk/kernel/config.hpp +++ b/sca-cpp/trunk/kernel/config.hpp @@ -43,7 +43,7 @@ namespace tuscany /** * Add string watch members to important classes to help watch them in a debugger. */ -#define WANT_MAINTAINER_WATCH +//#define WANT_MAINTAINER_WATCH /** * Increment / decrement a debug counter. diff --git a/sca-cpp/trunk/kernel/fstream.hpp b/sca-cpp/trunk/kernel/fstream.hpp index 99fc51565f..d57de2d76a 100644 --- a/sca-cpp/trunk/kernel/fstream.hpp +++ b/sca-cpp/trunk/kernel/fstream.hpp @@ -229,6 +229,7 @@ logfstream cdebug(stderr, "debug"); * Log a debug message. */ const bool debugLog(const string& msg) { + gc_scoped_pool(); cdebug << msg << endl; return true; } @@ -237,6 +238,7 @@ const bool debugLog(const string& msg) { * Log a debug message and a value. */ template<typename V> const bool debugLog(const V& v, const string& msg) { + gc_scoped_pool(); cdebug << msg << ": " << v << endl; return true; } 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<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<value> path(pathValues(r->uri)); diff --git a/sca-cpp/trunk/modules/java/eval.hpp b/sca-cpp/trunk/modules/java/eval.hpp index 11e57cb08a..a73c84c64c 100644 --- a/sca-cpp/trunk/modules/java/eval.hpp +++ b/sca-cpp/trunk/modules/java/eval.hpp @@ -51,6 +51,7 @@ jobject JNICALL nativeUUID(JNIEnv *env); class JavaRuntime { public: JavaRuntime() { + debug("java::javaruntime"); // Get existing JVM jsize nvms = 0; @@ -151,6 +152,10 @@ public: env->RegisterNatives(uuidClass, &uuidnm, 1); } + ~JavaRuntime() { + debug("java::~javaruntime"); + } + JavaVM* jvm; JNIEnv* env; diff --git a/sca-cpp/trunk/modules/js/eval.hpp b/sca-cpp/trunk/modules/js/eval.hpp index b7c69a1a0c..6bbbdac0d7 100644 --- a/sca-cpp/trunk/modules/js/eval.hpp +++ b/sca-cpp/trunk/modules/js/eval.hpp @@ -55,6 +55,7 @@ class JSRuntime { public: JSRuntime() { // Create JS runtime + debug("js::jsruntime"); rt = JS_NewRuntime(8L * 1024L * 1024L); if(rt == NULL) cleanup(); @@ -63,6 +64,11 @@ public: operator ::JSRuntime*() const { return rt; } + + ~JSRuntime() { + debug("js::~jsruntime"); + } + private: bool cleanup() { if(rt != NULL) { @@ -86,6 +92,7 @@ class JSContext { public: JSContext() { // Create JS context + debug("js::jscontext"); cx = JS_NewContext(jsRuntime, 8192); if(cx == NULL) return; @@ -108,6 +115,7 @@ public: } ~JSContext() { + debug("js::~jscontext"); cleanup(); } diff --git a/sca-cpp/trunk/modules/oauth/mod-oauth1.cpp b/sca-cpp/trunk/modules/oauth/mod-oauth1.cpp index 0f190127db..84de8f2d05 100644 --- a/sca-cpp/trunk/modules/oauth/mod-oauth1.cpp +++ b/sca-cpp/trunk/modules/oauth/mod-oauth1.cpp @@ -394,7 +394,10 @@ 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); + + // Get the server configuration httpdDebugRequest(r, "modoauth1::checkAuthn::input"); const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_oauth1); diff --git a/sca-cpp/trunk/modules/oauth/mod-oauth2.cpp b/sca-cpp/trunk/modules/oauth/mod-oauth2.cpp index b52967977e..51bd240177 100644 --- a/sca-cpp/trunk/modules/oauth/mod-oauth2.cpp +++ b/sca-cpp/trunk/modules/oauth/mod-oauth2.cpp @@ -246,7 +246,10 @@ 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); + + // Get the server configuration httpdDebugRequest(r, "modoauth2::checkAuthn::input"); const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_oauth2); diff --git a/sca-cpp/trunk/modules/python/eval.hpp b/sca-cpp/trunk/modules/python/eval.hpp index 2dd4b8ba33..bf539faa38 100644 --- a/sca-cpp/trunk/modules/python/eval.hpp +++ b/sca-cpp/trunk/modules/python/eval.hpp @@ -39,12 +39,17 @@ namespace python { class PythonRuntime { public: PythonRuntime() { + debug("python::pythonruntime"); if (Py_IsInitialized()) return; Py_InitializeEx(0); const char* arg0 = ""; PySys_SetArgv(0, const_cast<char**>(&arg0)); } + + ~PythonRuntime() { + debug("python::~pythonruntime"); + } }; /** @@ -97,11 +102,15 @@ typedef struct { PyObject *mkPyLambda(const lambda<value(const list<value>&)>& l); void pyLambda_dealloc(PyObject* self) { - PyMem_DEL(self); + debug(self, "python::pylambda_dealloc"); + PyObject_Del(self); } -const string pyRepr(PyObject * o) { - return PyString_AsString(PyObject_Repr(o)); +const string pyRepr(PyObject* o) { + PyObject* r = PyObject_Repr(o); + const string s = PyString_AsString(r); + Py_DECREF(r); + return s; } PyObject* pyLambda_call(PyObject* self, PyObject* args, unused PyObject* kwds) { @@ -109,9 +118,7 @@ PyObject* pyLambda_call(PyObject* self, PyObject* args, unused PyObject* kwds) { const pyLambda* pyl = (pyLambda*)self; const value result = pyl->func(pyTupleToValues(args)); debug(result, "python::call::result"); - Py_DECREF(args); PyObject *pyr = valueToPyObject(result); - Py_INCREF(pyr); return pyr; } @@ -143,7 +150,6 @@ PyObject* pyLambda_getattr(PyObject *self, PyObject *attrname) { const pyLambda* pyl = (pyLambda*)self; debug(name, "python::getattr::name"); PyObject* pyr = mkPyLambda(pyProxy(name, pyl->func)); - Py_INCREF(pyr); return pyr; } @@ -169,9 +175,10 @@ PyTypeObject pyLambda_type = { */ PyObject *mkPyLambda(const lambda<value(const list<value>&)>& l) { pyLambda* pyl = NULL; - pyl = PyObject_NEW(pyLambda, &pyLambda_type); + pyl = PyObject_New(pyLambda, &pyLambda_type); if (pyl != NULL) pyl->func = l; + debug(pyl, "python::mkpylambda"); return (PyObject *)pyl; } @@ -181,12 +188,17 @@ PyObject *mkPyLambda(const lambda<value(const list<value>&)>& l) { PyObject* valuesToPyListHelper(PyObject* l, const list<value>& v) { if (isNil(v)) return l; - PyList_Append(l, valueToPyObject(car(v))); + PyObject* pyv = valueToPyObject(car(v)); + PyList_Append(l, pyv); + Py_DECREF(pyv); return valuesToPyListHelper(l, cdr(v)); } PyObject* valuesToPyTuple(const list<value>& v) { - return PyList_AsTuple(valuesToPyListHelper(PyList_New(0), v)); + PyObject* pyl = valuesToPyListHelper(PyList_New(0), v); + PyObject* pyt = PyList_AsTuple(pyl); + Py_DECREF(pyl); + return pyt; } /** @@ -242,8 +254,8 @@ struct pyCallable { const value operator()(const list<value>& args) const { PyObject* pyargs = valuesToPyTuple(args); PyObject* result = PyObject_CallObject(func, pyargs); - Py_DECREF(pyargs); const value v = pyObjectToValue(result); + Py_DECREF(pyargs); Py_DECREF(result); return v; } @@ -309,8 +321,8 @@ const failable<value> evalScript(const value& expr, PyObject* script) { // Call the function PyObject* result = PyObject_CallObject(func, args); - Py_DECREF(args); Py_DECREF(func); + Py_DECREF(args); if (result == NULL) return mkfailure<value>(string("Function call failed: ") + car<value>(expr) + " : " + lastError()); diff --git a/sca-cpp/trunk/modules/server/mod-eval.hpp b/sca-cpp/trunk/modules/server/mod-eval.hpp index 8dac21de04..4ee40e51ee 100644 --- a/sca-cpp/trunk/modules/server/mod-eval.hpp +++ b/sca-cpp/trunk/modules/server/mod-eval.hpp @@ -628,7 +628,9 @@ int handler(request_rec *r) { if(strcmp(r->handler, "mod_tuscany_eval")) return DECLINED; + // Create a scoped memory pool gc_scoped_pool pool(r->pool); + ScopedRequest sr(r); httpdDebugRequest(r, "modeval::handler::input"); diff --git a/sca-cpp/trunk/modules/server/mod-wiring.cpp b/sca-cpp/trunk/modules/server/mod-wiring.cpp index 0ab61f5af8..b63cd3fb37 100644 --- a/sca-cpp/trunk/modules/server/mod-wiring.cpp +++ b/sca-cpp/trunk/modules/server/mod-wiring.cpp @@ -310,8 +310,10 @@ int translate(request_rec *r) { if (!strncmp(r->uri, "/components/", 12)) return DECLINED; - // Get the server configuration + // Create a scoped memory pool gc_scoped_pool pool(r->pool); + + // Get the server configuration const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_wiring); // Process dynamic virtual host configuration @@ -346,8 +348,10 @@ int handler(request_rec *r) { if (r->status == HTTP_MOVED_TEMPORARILY) return OK; - // Do an internal redirect + // Create a scoped memory pool gc_scoped_pool pool(r->pool); + + // Do an internal redirect httpdDebugRequest(r, "modwiring::handler::input"); debug(r->uri, "modwiring::handler::uri"); |