Commit 6d467a77 authored by Chris Darroch's avatar Chris Darroch
Browse files

Stash DBD connections in request_config of initial request

only, or else sub-requests and internal redirections may cause
entire DBD pool to be stashed in a single HTTP request.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@481509 13f79535-47bb-0310-9956-ffa450edef68
parent 742664c6
Loading
Loading
Loading
Loading
+4 −0
Changes for CHANGES: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,10 @@
Changes with Apache 2.3.0
  [Remove entries to the current 2.0 and 2.2 section below, when backported]
  *) mod_dbd: Stash DBD connections in request_config of initial request
     only, or else sub-requests and internal redirections may cause
     entire DBD pool to be stashed in a single HTTP request.  [Chris Darroch]
  *) mod_cache: Correctly cache objects whose URL query string has been
     modified by mod_rewrite. PR 40805. [Ruediger Pluem]
+24 −2
Changes for modules/database/mod_dbd.c: 24 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -524,7 +524,18 @@ static apr_status_t dbd_release(void *REQ)
DBD_DECLARE_NONSTD(ap_dbd_t *) ap_dbd_acquire(request_rec *r)
{
    svr_cfg *svr;
    dbd_pool_rec *req = ap_get_module_config(r->request_config, &dbd_module);
    dbd_pool_rec *req;

    while (!ap_is_initial_req(r)) {
        if (r->prev) {
            r = r->prev;
        }
        else if (r->main) {
            r = r->main;
        }
    }

    req = ap_get_module_config(r->request_config, &dbd_module);
    if (!req) {
        req = apr_palloc(r->pool, sizeof(dbd_pool_rec));
        req->conn = ap_dbd_open(r->pool, r->server);
@@ -571,7 +582,18 @@ DBD_DECLARE_NONSTD(ap_dbd_t *) ap_dbd_cacquire(conn_rec *c)
DBD_DECLARE_NONSTD(ap_dbd_t *) ap_dbd_acquire(request_rec *r)
{
    svr_cfg *svr;
    ap_dbd_t *ret = ap_get_module_config(r->request_config, &dbd_module);
    ap_dbd_t *ret;

    while (!ap_is_initial_req(r)) {
        if (r->prev) {
            r = r->prev;
        }
        else if (r->main) {
            r = r->main;
        }
    }

    ret = ap_get_module_config(r->request_config, &dbd_module);
    if (!ret) {
        svr = ap_get_module_config(r->server->module_config, &dbd_module);
        ret = ap_dbd_open(r->pool, r->server);