From 574ccee478b9da9457cdf0e476b8df6eb584b580 Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Mon, 16 Jul 2012 06:48:11 +0000 Subject: Minor memory management, performance, and tracing improvements. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1361917 13f79535-47bb-0310-9956-ffa450edef68 --- sca-cpp/trunk/components/cache/memcache.hpp | 34 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'sca-cpp/trunk/components/cache/memcache.hpp') diff --git a/sca-cpp/trunk/components/cache/memcache.hpp b/sca-cpp/trunk/components/cache/memcache.hpp index fe77c26671..f18405b2ec 100644 --- a/sca-cpp/trunk/components/cache/memcache.hpp +++ b/sca-cpp/trunk/components/cache/memcache.hpp @@ -49,38 +49,41 @@ namespace memcache { class MemCached { public: MemCached() : owner(false) { - debug("memcache::memcached"); } - MemCached(const string host, const int port) : owner(true) { + MemCached(const string host, const int port) : p(), owner(true) { debug(host, "memcache::memcached::host"); debug(port, "memcache::memcached::port"); - apr_pool_create(&pool, NULL); - apr_memcache_create(pool, 1, 0, &mc); + apr_memcache_create(pool(p), 1, 0, &mc); addServer(host, port); } - MemCached(const list& servers) : owner(true) { + MemCached(const list& servers) : p(), owner(true) { debug(servers, "memcache::memcached::servers"); - apr_pool_create(&pool, NULL); - apr_memcache_create(pool, (apr_uint16_t)length(servers), 0, &mc); + apr_memcache_create(pool(p), (apr_uint16_t)length(servers), 0, &mc); addServers(servers); } - MemCached(const MemCached& c) : owner(false), pool(c.pool), mc(c.mc) { + MemCached(const MemCached& c) : p(c.p), owner(false), mc(c.mc) { debug("memcache::memcached::copy"); } + const MemCached& operator=(const MemCached& c) { + debug("memcache::memcached::operator="); + if(this == &c) + return *this; + p = c.p; + owner = false; + mc = c.mc; + return *this; + } + ~MemCached() { - debug("memcache::~memcached"); - if (!owner) - return; - apr_pool_destroy(pool); } private: + gc_child_pool p; bool owner; - apr_pool_t* pool; apr_memcache_t* mc; friend const failable post(const value& key, const value& val, const MemCached& cache); @@ -93,7 +96,7 @@ private: */ const failable addServer(const string& host, const int port) { apr_memcache_server_t *server; - const apr_status_t sc = apr_memcache_server_create(pool, c_str(host), (apr_port_t)port, 1, 1, 1, 600, &server); + const apr_status_t sc = apr_memcache_server_create(pool(p), c_str(host), (apr_port_t)port, 1, 1, 1, 600, &server); if (sc != APR_SUCCESS) { ostringstream os; os << "Couldn't connect to memcached server: " << host << ":" << port; @@ -176,7 +179,8 @@ const failable get(const value& key, const MemCached& cache) { const string ks(scheme::writeValue(key)); char *data; apr_size_t size; - const apr_status_t rc = apr_memcache_getp(cache.mc, cache.pool, nospaces(c_str(ks)), &data, &size, NULL); + gc_local_pool lp; + const apr_status_t rc = apr_memcache_getp(cache.mc, pool(lp), nospaces(c_str(ks)), &data, &size, NULL); if (rc != APR_SUCCESS) { ostringstream os; os << "Couldn't get memcached entry: " << key; -- cgit v1.2.3