http://mail-archives.apache.org/mod_mbox//httpd-dev/200609.mbox/%3c1404e5910609091218p84f4d2flc1000764b4966727@mail.gmail.com%3e
+1: trawick, wrowe, jerenkrantz
- * mod_proxy: Log unlock errors (as we do with locking errors).
- Add additional clarification on where the error occurred.
- Trunk version of patch:
- http://svn.apache.org/viewvc?view=rev&revision=484792
- http://svn.apache.org/viewvc?view=rev&revision=484787
- http://svn.apache.org/viewvc?view=rev&revision=484978
- 2.2.x version of patch:
- For r484787, see: http://people.apache.org/~jim/patches/lock.txt
- otherwise, trunk version works.
- +1: jim, rpluem, wrowe
PATCHES PROPOSED TO BACKPORT FROM TRUNK:
request_rec *r)
{
proxy_worker *candidate = NULL;
+ apr_status_t rv;
- if (PROXY_THREAD_LOCK(balancer) != APR_SUCCESS)
+ if ((rv = PROXY_THREAD_LOCK(balancer)) != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
+ "proxy: BALANCER: (%s). Lock failed for find_best_worker()", balancer->name);
return NULL;
+ }
candidate = (*balancer->lbmethod->finder)(balancer, r);
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.
*/
if ((rv = PROXY_THREAD_LOCK(*balancer)) != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
- "proxy: BALANCER: lock");
+ "proxy: BALANCER: (%s). Lock failed for pre_request",
+ (*balancer)->name);
return DECLINED;
}
if (runtime) {
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) {
if ((rv = PROXY_THREAD_LOCK(balancer)) != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
- "proxy: BALANCER: lock");
+ "proxy: BALANCER: (%s). Lock failed for post_request",
+ balancer->name);
return HTTP_INTERNAL_SERVER_ERROR;
}
/* TODO: calculate the bytes transferred
* track on that.
*/
- 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);
apr_status_t rv;
conn_rec *origin, *data = NULL;
apr_status_t err = APR_SUCCESS;
+ apr_status_t uerr = APR_SUCCESS;
apr_bucket_brigade *bb = apr_brigade_create(p, c->bucket_alloc);
char *buf, *connectname;
apr_port_t connectport;
address_pool);
if (worker->is_address_reusable && !worker->cp->addr) {
worker->cp->addr = connect_addr;
- PROXY_THREAD_UNLOCK(worker);
+ if ((uerr = PROXY_THREAD_UNLOCK(worker)) != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, uerr, r->server,
+ "proxy: FTP: unlock");
+ }
}
/*
* get all the possible IP addresses for the destname and loop through