summaryrefslogtreecommitdiff
path: root/srclib/apr-util/memcache
diff options
context:
space:
mode:
authorStefan Fritsch <sf@sfritsch.de>2012-01-29 13:30:57 +0100
committerStefan Fritsch <sf@sfritsch.de>2012-01-29 13:30:57 +0100
commitd1d018768afd79cb2ecd1805f0d8f3ed23f4076b (patch)
tree04d53b0a9786234f3bbd3badffdb22dbe2b74d03 /srclib/apr-util/memcache
parent0890390c00801651d08d3794e13b31a5dabbf5ef (diff)
downloadapache2-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.c61
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);