You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rp...@apache.org on 2019/10/11 14:36:32 UTC
svn commit: r1868294 - /httpd/httpd/trunk/modules/proxy/proxy_util.c
Author: rpluem
Date: Fri Oct 11 14:36:32 2019
New Revision: 1868294
URL: http://svn.apache.org/viewvc?rev=1868294&view=rev
Log:
* Revert r1865944 and r1865938
Revert r1865944 and r1865938 in order to provide a better patch with less
locking and thus contention.
lognos
PR63503: fix pool concurrency problems in mod_proxy
reslist and resolver related calls could concurrently access the same pool.
Submitted By: Don Poitras <Don.Poitras sas.com>
Committed By: covener
Modified:
httpd/httpd/trunk/modules/proxy/proxy_util.c
Modified: httpd/httpd/trunk/modules/proxy/proxy_util.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/proxy_util.c?rev=1868294&r1=1868293&r2=1868294&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/proxy_util.c (original)
+++ httpd/httpd/trunk/modules/proxy/proxy_util.c Fri Oct 11 14:36:32 2019
@@ -2053,34 +2053,22 @@ PROXY_DECLARE(apr_status_t) ap_proxy_ini
if (worker->tmutex == NULL) {
rv = apr_thread_mutex_create(&(worker->tmutex), APR_THREAD_MUTEX_DEFAULT, p);
if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(00928)
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(00928)
"can not create worker thread mutex");
apr_global_mutex_unlock(proxy_mutex);
return rv;
}
}
- if ((rv = PROXY_THREAD_LOCK(worker)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(10190) "lock");
- apr_global_mutex_unlock(proxy_mutex);
- return rv;
- }
#endif
if (worker->cp == NULL)
init_conn_pool(p, worker);
if (worker->cp == NULL) {
ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(00929)
"can not create connection pool");
- if ((rv = PROXY_THREAD_UNLOCK(worker)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(10191) "unlock");
- }
apr_global_mutex_unlock(proxy_mutex);
return APR_EGENERAL;
}
- if ((rv = PROXY_THREAD_UNLOCK(worker)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(10192) "unlock");
- }
-
if (worker->s->hmax) {
rv = apr_reslist_create(&(worker->cp->res),
worker->s->min, worker->s->smax,
@@ -2108,16 +2096,13 @@ PROXY_DECLARE(apr_status_t) ap_proxy_ini
rv = connection_constructor(&conn, worker, worker->cp->pool);
worker->cp->conn = conn;
- ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, s, APLOGNO(00931)
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(00931)
"initialized single connection worker in child %" APR_PID_T_FMT " for (%s)",
getpid(), worker->s->hostname_ex);
}
- if ((rv = PROXY_THREAD_UNLOCK(worker)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(10193) "unlock");
- }
apr_global_mutex_unlock(proxy_mutex);
- } /* init worker */
+ }
if (rv == APR_SUCCESS) {
worker->s->status |= (PROXY_WORKER_INITIALIZED);
worker->local_status |= (PROXY_WORKER_INITIALIZED);
@@ -2361,7 +2346,6 @@ PROXY_DECLARE(int) ap_proxy_acquire_conn
server_rec *s)
{
apr_status_t rv;
- apr_status_t err;
if (!PROXY_WORKER_IS_USABLE(worker)) {
/* Retry the worker */
@@ -2376,26 +2360,18 @@ PROXY_DECLARE(int) ap_proxy_acquire_conn
}
if (worker->s->hmax && worker->cp->res) {
- if ((err = PROXY_THREAD_LOCK(worker)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, err, s, APLOGNO(10194) "lock");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
rv = apr_reslist_acquire(worker->cp->res, (void **)conn);
- if ((err = PROXY_THREAD_UNLOCK(worker)) != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, err, s, APLOGNO(10195) "unlock");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
}
else {
/* create the new connection if the previous was destroyed */
if (!worker->cp->conn) {
- rv = connection_constructor((void **)conn, worker, worker->cp->pool);
+ connection_constructor((void **)conn, worker, worker->cp->pool);
}
else {
*conn = worker->cp->conn;
worker->cp->conn = NULL;
- rv = APR_SUCCESS;
}
+ rv = APR_SUCCESS;
}
if (rv != APR_SUCCESS) {