diff options
author | Stefan Fritsch <sf@sfritsch.de> | 2012-01-29 13:30:57 +0100 |
---|---|---|
committer | Stefan Fritsch <sf@sfritsch.de> | 2012-01-29 13:30:57 +0100 |
commit | d1d018768afd79cb2ecd1805f0d8f3ed23f4076b (patch) | |
tree | 04d53b0a9786234f3bbd3badffdb22dbe2b74d03 /srclib/apr-util/memcache | |
parent | 0890390c00801651d08d3794e13b31a5dabbf5ef (diff) | |
download | apache2-upstream/2.2.22.tar.gz |
Upstream tarball 2.2.22upstream/2.2.22
Diffstat (limited to 'srclib/apr-util/memcache')
-rw-r--r-- | srclib/apr-util/memcache/apr_memcache.c | 61 |
1 files changed, 19 insertions, 42 deletions
diff --git a/srclib/apr-util/memcache/apr_memcache.c b/srclib/apr-util/memcache/apr_memcache.c index ee929e97..f96d887a 100644 --- a/srclib/apr-util/memcache/apr_memcache.c +++ b/srclib/apr-util/memcache/apr_memcache.c @@ -313,27 +313,6 @@ static apr_status_t conn_connect(apr_memcache_conn_t *conn) return rv; } -static apr_status_t conn_clean(void *data) -{ - apr_memcache_conn_t *conn = data; - struct iovec vec[2]; - apr_size_t written; - - /* send a quit message to the memcached server to be nice about it. */ - vec[0].iov_base = MC_QUIT; - vec[0].iov_len = MC_QUIT_LEN; - - vec[1].iov_base = MC_EOL; - vec[1].iov_len = MC_EOL_LEN; - - /* Return values not checked, since we just want to make it go away. */ - apr_socket_sendv(conn->sock, vec, 2, &written); - apr_socket_close(conn->sock); - - conn->p = NULL; /* so that destructor does not destroy the pool again */ - - return APR_SUCCESS; -} static apr_status_t mc_conn_construct(void **conn_, void *params, apr_pool_t *pool) @@ -355,11 +334,7 @@ mc_conn_construct(void **conn_, void *params, apr_pool_t *pool) return rv; } -#if APR_HAS_THREADS - conn = malloc(sizeof( apr_memcache_conn_t )); /* non-pool space! */ -#else conn = apr_palloc(np, sizeof( apr_memcache_conn_t )); -#endif conn->p = np; conn->tp = tp; @@ -368,9 +343,6 @@ mc_conn_construct(void **conn_, void *params, apr_pool_t *pool) if (rv != APR_SUCCESS) { apr_pool_destroy(np); -#if APR_HAS_THREADS - free(conn); -#endif return rv; } @@ -381,12 +353,8 @@ mc_conn_construct(void **conn_, void *params, apr_pool_t *pool) rv = conn_connect(conn); if (rv != APR_SUCCESS) { apr_pool_destroy(np); -#if APR_HAS_THREADS - free(conn); -#endif } else { - apr_pool_cleanup_register(np, conn, conn_clean, apr_pool_cleanup_null); *conn_ = conn; } @@ -398,12 +366,21 @@ static apr_status_t mc_conn_destruct(void *conn_, void *params, apr_pool_t *pool) { apr_memcache_conn_t *conn = (apr_memcache_conn_t*)conn_; + struct iovec vec[2]; + apr_size_t written; - if (conn->p) { - apr_pool_destroy(conn->p); - } + /* send a quit message to the memcached server to be nice about it. */ + vec[0].iov_base = MC_QUIT; + vec[0].iov_len = MC_QUIT_LEN; + + vec[1].iov_base = MC_EOL; + vec[1].iov_len = MC_EOL_LEN; + + /* Return values not checked, since we just want to make it go away. */ + apr_socket_sendv(conn->sock, vec, 2, &written); + apr_socket_close(conn->sock); - free(conn); /* free non-pool space */ + apr_pool_destroy(conn->p); return APR_SUCCESS; } @@ -441,13 +418,17 @@ APU_DECLARE(apr_status_t) apr_memcache_server_create(apr_pool_t *p, mc_conn_construct, /* Make a New Connection */ mc_conn_destruct, /* Kill Old Connection */ server, np); + if (rv != APR_SUCCESS) { + return rv; + } + + apr_reslist_cleanup_order_set(server->conns, APR_RESLIST_CLEANUP_FIRST); #else rv = mc_conn_construct((void**)&(server->conn), server, np); -#endif - if (rv != APR_SUCCESS) { return rv; } +#endif *ms = server; @@ -793,11 +774,9 @@ apr_memcache_getp(apr_memcache_t *mc, if (strncmp(MS_VALUE, conn->buffer, MS_VALUE_LEN) == 0) { char *flags; char *length; - char *start; char *last; apr_size_t len = 0; - start = conn->buffer; flags = apr_strtok(conn->buffer, " ", &last); flags = apr_strtok(NULL, " ", &last); flags = apr_strtok(NULL, " ", &last); @@ -1366,12 +1345,10 @@ apr_memcache_multgetp(apr_memcache_t *mc, char *key; char *flags; char *length; - char *start; char *last; char *data; apr_size_t len = 0; - start = conn->buffer; key = apr_strtok(conn->buffer, " ", &last); /* just the VALUE, ignore */ key = apr_strtok(NULL, " ", &last); flags = apr_strtok(NULL, " ", &last); |