That doesn't look thread safe:
* Calling containsKey is not the same as a null check.
* "double checked locking" is an anti-pattern because it is unsafe.
* In addition to that, you added an unsynchronized call to the get method.

Andreas

On Sun, Jul 13, 2014 at 7:15 PM,  <[email protected]> wrote:
> Author: uswick
> Date: Sun Jul 13 18:14:59 2014
> New Revision: 1610262
>
> URL: http://svn.apache.org/r1610262
> Log:
> avoid sync overhead each time null is checked - use double checked locking
>
> Modified:
>     
> synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/connections/TargetConnections.java
>
> Modified: 
> synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/connections/TargetConnections.java
> URL: 
> http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/connections/TargetConnections.java?rev=1610262&r1=1610261&r2=1610262&view=diff
> ==============================================================================
> --- 
> synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/connections/TargetConnections.java
>  (original)
> +++ 
> synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/connections/TargetConnections.java
>  Sun Jul 13 18:14:59 2014
> @@ -205,16 +205,16 @@ public class TargetConnections {
>
>      private HostConnections getConnectionPool(String host, int port) {
>          String key = host + ":" + port;
> -        HostConnections pool;
> -        synchronized (poolMap) {
> -            // see weather a pool already exists for this host:port
> -            pool = poolMap.get(key);
> -            if (pool == null) {
> -                pool = new HostConnections(host, port, maxConnections);
> -                poolMap.put(key, pool);
> +        if (!poolMap.containsKey(key)) {
> +            synchronized (poolMap) {
> +                // see weather a pool already exists for this host:port
> +                if (!poolMap.containsKey(key)) {
> +                    HostConnections pool = new HostConnections(host, port, 
> maxConnections);
> +                    poolMap.put(key, pool);
> +                }
>              }
>          }
> -        return pool;
> +        return poolMap.get(key);
>      }
>
>  }
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to