]> granicus.if.org Git - apache/commitdiff
Lock around the time when we're mucking w/ balancers...
authorJim Jagielski <jim@apache.org>
Fri, 4 Feb 2011 20:34:47 +0000 (20:34 +0000)
committerJim Jagielski <jim@apache.org>
Fri, 4 Feb 2011 20:34:47 +0000 (20:34 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1067276 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/mod_proxy_balancer.c

index c5f79418762e7872ed58768251abe385eef70f57..1865a871951a5e40d3384129a9bc881b6cfdbd37 100644 (file)
@@ -876,8 +876,20 @@ static int balancer_handler(request_rec *r)
     params = apr_table_make(r->pool, 10);
 
     balancer = (proxy_balancer *)conf->balancers->elts;
-    for (i = 0; i < conf->balancers->nelts; i++, balancer++)
+    for (i = 0; i < conf->balancers->nelts; i++, balancer++) {
+        apr_status_t rv;
+        if ((rv = PROXY_GLOBAL_LOCK(balancer)) != APR_SUCCESS) {
+            ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
+                         "proxy: BALANCER: (%s). Lock failed for balancer_handler",
+                         balancer->name);
+        }
         ap_proxy_update_members(balancer, r->server, conf);
+        if ((rv = PROXY_GLOBAL_UNLOCK(balancer)) != APR_SUCCESS) {
+            ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
+                         "proxy: BALANCER: (%s). Unlock failed for balancer_handler",
+                         balancer->name);
+        }
+    }
 
     if (r->args) {
         char *args = apr_pstrdup(r->pool, r->args);