This is an automated email from the ASF dual-hosted git repository. sruehl pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
The following commit(s) were added to refs/heads/master by this push: new 71206e0 [plc4j-pool] fixed lock mixup 71206e0 is described below commit 71206e0f4b5bbb9e3f9aee1fd097ce0d5c44e9e9 Author: Sebastian Rühl <sru...@apache.org> AuthorDate: Thu Oct 25 17:16:51 2018 +0200 [plc4j-pool] fixed lock mixup --- .../connectionpool/PooledPlcDriverManager.java | 32 +++++++++++++--------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/plc4j/utils/connection-pool/src/main/java/org/apache/plc4x/java/utils/connectionpool/PooledPlcDriverManager.java b/plc4j/utils/connection-pool/src/main/java/org/apache/plc4x/java/utils/connectionpool/PooledPlcDriverManager.java index fb4db02..13c7ce6 100644 --- a/plc4j/utils/connection-pool/src/main/java/org/apache/plc4x/java/utils/connectionpool/PooledPlcDriverManager.java +++ b/plc4j/utils/connection-pool/src/main/java/org/apache/plc4x/java/utils/connectionpool/PooledPlcDriverManager.java @@ -100,7 +100,7 @@ public class PooledPlcDriverManager extends PlcDriverManager { PlcAuthentication plcAuthentication = argPair.getRight(); ObjectPool<PlcConnection> pool = poolMap.get(argPair); if (pool == null) { - Lock lock = readWriteLock.readLock(); + Lock lock = readWriteLock.writeLock(); lock.lock(); try { poolMap.computeIfAbsent(argPair, pair -> poolCreator.createPool(new PooledPlcConnectionFactory() { @@ -150,19 +150,25 @@ public class PooledPlcDriverManager extends PlcDriverManager { // TODO: maybe export to jmx public Map<String, Number> getStatistics() { - HashMap<String, Number> statistics = new HashMap<>(); - for (Map.Entry<Pair<String, PlcAuthentication>, ObjectPool<PlcConnection>> poolEntry : poolMap.entrySet()) { - Pair<String, PlcAuthentication> pair = poolEntry.getKey(); - ObjectPool<PlcConnection> objectPool = poolEntry.getValue(); - String url = pair.getLeft(); - PlcAuthentication plcAuthentication = pair.getRight(); - - String authSuffix = plcAuthentication != noPlcAuthentication ? "/" + plcAuthentication : ""; - statistics.put(url + authSuffix + ".numActive", objectPool.getNumActive()); - statistics.put(url + authSuffix + ".numIdle", objectPool.getNumIdle()); - } + Lock lock = readWriteLock.readLock(); + try { + lock.lock(); + HashMap<String, Number> statistics = new HashMap<>(); + for (Map.Entry<Pair<String, PlcAuthentication>, ObjectPool<PlcConnection>> poolEntry : poolMap.entrySet()) { + Pair<String, PlcAuthentication> pair = poolEntry.getKey(); + ObjectPool<PlcConnection> objectPool = poolEntry.getValue(); + String url = pair.getLeft(); + PlcAuthentication plcAuthentication = pair.getRight(); + + String authSuffix = plcAuthentication != noPlcAuthentication ? "/" + plcAuthentication : ""; + statistics.put(url + authSuffix + ".numActive", objectPool.getNumActive()); + statistics.put(url + authSuffix + ".numIdle", objectPool.getNumIdle()); + } - return statistics; + return statistics; + } finally { + lock.unlock(); + } } private static final class NoPlcAuthentication implements PlcAuthentication {