Commit 4d4f23c8 authored by Jim Jagielski's avatar Jim Jagielski
Browse files

Failure to unlock is very nasty, so log it to help

with troubleshooting.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@484792 13f79535-47bb-0310-9956-ffa450edef68
parent 5226faf8
Loading
Loading
Loading
Loading
+19 −4
Changes for modules/proxy/mod_proxy_balancer.c: 19 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -305,7 +305,10 @@ static proxy_worker *find_best_worker(proxy_balancer *balancer,
        return NULL;
*/

    PROXY_THREAD_UNLOCK(balancer);
    if ((rv = PROXY_THREAD_UNLOCK(balancer)) != APR_SUCCESS) {
        ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
        "proxy: BALANCER: (%s). Unlock failed for find_best_worker()", balancer->name);
    }

    if (candidate == NULL) {
        /* All the workers are in error state or disabled.
@@ -458,11 +461,19 @@ static int proxy_balancer_pre_request(proxy_worker **worker,
        ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
                     "proxy: BALANCER: (%s). All workers are in error state for route (%s)",
                     (*balancer)->name, route);
        PROXY_THREAD_UNLOCK(*balancer);
        if ((rv = PROXY_THREAD_UNLOCK(*balancer)) != APR_SUCCESS) {
            ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
                         "proxy: BALANCER: (%s). Unlock failed for pre_request",
                         (*balancer)->name);
        }
        return HTTP_SERVICE_UNAVAILABLE;
    }

    PROXY_THREAD_UNLOCK(*balancer);
    if ((rv = PROXY_THREAD_UNLOCK(*balancer)) != APR_SUCCESS) {
        ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
                     "proxy: BALANCER: (%s). Unlock failed for pre_request",
                     (*balancer)->name);
    }
    if (!*worker) {
        runtime = find_best_worker(*balancer, r);
        if (!runtime) {
@@ -535,7 +546,11 @@ static int proxy_balancer_post_request(proxy_worker *worker,
    /* TODO: placeholder for post_request actions
     */

    PROXY_THREAD_UNLOCK(balancer);
    if ((rv = PROXY_THREAD_UNLOCK(balancer)) != APR_SUCCESS) {
        ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
            "proxy: BALANCER: (%s). Unlock failed for post_request",
            balancer->name);
    }
    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
                 "proxy_balancer_post_request for (%s)", balancer->name);

+4 −1
Changes for modules/proxy/mod_proxy_ftp.c: 4 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -916,7 +916,10 @@ static int proxy_ftp_handler(request_rec *r, proxy_worker *worker,
                                    address_pool);
    if (worker->is_address_reusable && !worker->cp->addr) {
        worker->cp->addr = connect_addr;
        PROXY_THREAD_UNLOCK(worker);
        if ((err = PROXY_THREAD_UNLOCK(worker)) != APR_SUCCESS) {
            ap_log_error(APLOG_MARK, APLOG_ERR, err, r->server,
                         "proxy: FTP: unlock");
        }
    }
    /*
     * get all the possible IP addresses for the destname and loop through
+4 −1
Changes for modules/proxy/proxy_util.c: 4 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -2049,7 +2049,10 @@ ap_proxy_determine_connection(apr_pool_t *p, request_rec *r,
                                    conn->port, 0,
                                    worker->cp->pool);
        conn->addr = worker->cp->addr;
        PROXY_THREAD_UNLOCK(worker);
        if ((err = PROXY_THREAD_UNLOCK(worker)) != APR_SUCCESS) {
            ap_log_error(APLOG_MARK, APLOG_ERR, err, r->server,
                         "proxy: unlock");
        }
    }
    else {
        conn->addr = worker->cp->addr;