From 3b5d5bf319e5fa964735412f63d5d6a8f964e0cd Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Fri, 8 Dec 2006 21:37:08 +0000 Subject: [PATCH] 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 --- modules/proxy/mod_proxy_balancer.c | 23 +++++++++++++++++++---- modules/proxy/mod_proxy_ftp.c | 5 ++++- modules/proxy/proxy_util.c | 5 ++++- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c index ebcce2e693..529fa1a201 100644 --- a/modules/proxy/mod_proxy_balancer.c +++ b/modules/proxy/mod_proxy_balancer.c @@ -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); diff --git a/modules/proxy/mod_proxy_ftp.c b/modules/proxy/mod_proxy_ftp.c index be670c0f99..90079f433c 100644 --- a/modules/proxy/mod_proxy_ftp.c +++ b/modules/proxy/mod_proxy_ftp.c @@ -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 diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index e8be508ab8..5fbc5c3b4b 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -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; -- 2.40.0