You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/10/25 15:18:46 UTC
[incubator-plc4x] branch master updated: [plc4j-pool] fixed lock
mixup
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 <sr...@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 {