diff options
Diffstat (limited to 'modules/session/mod_session_dbd.c')
-rw-r--r-- | modules/session/mod_session_dbd.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/modules/session/mod_session_dbd.c b/modules/session/mod_session_dbd.c index af2dc2d09e..0f473ffb02 100644 --- a/modules/session/mod_session_dbd.c +++ b/modules/session/mod_session_dbd.c @@ -94,8 +94,11 @@ static apr_status_t dbd_init(request_rec *r, const char *query, ap_dbd_t **dbdp, /** * Load the session by the key specified. + * + * The session value is allocated using the passed apr_pool_t. */ -static apr_status_t dbd_load(request_rec * r, const char *key, const char **val) +static apr_status_t dbd_load(request_rec * r, apr_pool_t *pool, + const char *key, const char **val) { apr_status_t rv; @@ -138,7 +141,7 @@ static apr_status_t dbd_load(request_rec * r, const char *key, const char **val) return APR_EGENERAL; } if (*val == NULL) { - *val = apr_pstrdup(r->pool, + *val = apr_pstrdup(pool, apr_dbd_get_entry(dbd->driver, row, 0)); } /* we can't break out here or row won't get cleaned up */ @@ -204,7 +207,7 @@ static apr_status_t session_dbd_load(request_rec * r, session_rec ** z) /* load an RFC2109 or RFC2965 compliant cookie */ ap_cookie_read(r, name, &key, conf->remove); if (key) { - ret = dbd_load(r, key, &val); + ret = dbd_load(r, m->pool, key, &val); if (ret != APR_SUCCESS) { return ret; } @@ -215,7 +218,7 @@ static apr_status_t session_dbd_load(request_rec * r, session_rec ** z) /* load named session */ else if (conf->peruser) { if (r->user) { - ret = dbd_load(r, r->user, &val); + ret = dbd_load(r, m->pool, r->user, &val); if (ret != APR_SUCCESS) { return ret; } |