Index: memcache/apr_memcache.c =================================================================== --- memcache/apr_memcache.c (revision 685262) +++ memcache/apr_memcache.c (revision 746078) @@ -25,8 +25,8 @@ char *buffer; apr_size_t blen; apr_pool_t *p; + apr_pool_t *tp; apr_socket_t *sock; - apr_bucket_alloc_t *balloc; apr_bucket_brigade *bb; apr_bucket_brigade *tb; apr_memcache_server_t *ms; @@ -224,12 +224,29 @@ static apr_status_t ms_find_conn(apr_memcache_server_t *ms, apr_memcache_conn_t **conn) { + apr_status_t rv; + apr_bucket_alloc_t *balloc; + apr_bucket *e; + #if APR_HAS_THREADS - return apr_reslist_acquire(ms->conns, (void **)conn); + rv = apr_reslist_acquire(ms->conns, (void **)conn); #else *conn = ms->conn; - return APR_SUCCESS; + rv = APR_SUCCESS; #endif + + if (rv != APR_SUCCESS) { + return rv; + } + + balloc = apr_bucket_alloc_create((*conn)->tp); + (*conn)->bb = apr_brigade_create((*conn)->tp, balloc); + (*conn)->tb = apr_brigade_create((*conn)->tp, balloc); + + e = apr_bucket_socket_create((*conn)->sock, balloc); + APR_BRIGADE_INSERT_TAIL((*conn)->bb, e); + + return rv; } static apr_status_t ms_bad_conn(apr_memcache_server_t *ms, apr_memcache_conn_t *conn) @@ -243,6 +260,7 @@ static apr_status_t ms_release_conn(apr_memcache_server_t *ms, apr_memcache_conn_t *conn) { + apr_pool_clear(conn->tp); #if APR_HAS_THREADS return apr_reslist_release(ms->conns, conn); #else @@ -322,8 +340,8 @@ { apr_status_t rv = APR_SUCCESS; apr_memcache_conn_t *conn; - apr_bucket *e; apr_pool_t *np; + apr_pool_t *tp; apr_memcache_server_t *ms = params; rv = apr_pool_create(&np, pool); @@ -331,6 +349,12 @@ return rv; } + rv = apr_pool_create(&tp, np); + if (rv != APR_SUCCESS) { + apr_pool_destroy(np); + return rv; + } + #if APR_HAS_THREADS conn = malloc(sizeof( apr_memcache_conn_t )); /* non-pool space! */ #else @@ -338,6 +362,7 @@ #endif conn->p = np; + conn->tp = tp; rv = apr_socket_create(&conn->sock, APR_INET, SOCK_STREAM, 0, np); @@ -349,16 +374,10 @@ return rv; } - conn->balloc = apr_bucket_alloc_create(conn->p); - conn->bb = apr_brigade_create(conn->p, conn->balloc); - conn->tb = apr_brigade_create(conn->p, conn->balloc); conn->buffer = apr_palloc(conn->p, BUFFER_SIZE); conn->blen = 0; conn->ms = ms; - e = apr_bucket_socket_create(conn->sock, conn->balloc); - APR_BRIGADE_INSERT_TAIL(conn->bb, e); - rv = conn_connect(conn); if (rv != APR_SUCCESS) { apr_pool_destroy(np);