You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/01/21 12:31:40 UTC
[camel] branch master updated: [CAMEL-11947] Possible race
condition in iec60870 producer (#3503)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new 6d8db7b [CAMEL-11947] Possible race condition in iec60870 producer (#3503)
6d8db7b is described below
commit 6d8db7b502391085cbdac2973981a21648f9ec38
Author: Thomas Diesler <td...@redhat.com>
AuthorDate: Tue Jan 21 13:31:28 2020 +0100
[CAMEL-11947] Possible race condition in iec60870 producer (#3503)
---
.../iec60870/client/ClientConnection.java | 23 ++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientConnection.java b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientConnection.java
index ffee89c..a50a679 100644
--- a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientConnection.java
+++ b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientConnection.java
@@ -19,6 +19,8 @@ package org.apache.camel.component.iec60870.client;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import io.netty.channel.ChannelHandlerContext;
import org.apache.camel.component.iec60870.DiscardAckModule;
@@ -43,13 +45,6 @@ public class ClientConnection {
void update(ObjectAddress address, Value<?> value);
}
- private final StateListener stateListener = new StateListener() {
-
- @Override
- public void stateChanged(final State state, final Throwable e) {
- }
- };
-
private final DataHandler dataHandler = new AbstractDataProcessor() {
/**
@@ -99,7 +94,19 @@ public class ClientConnection {
public void start() {
final DataModule dataModule = new DataModule(this.dataHandler, this.options.getDataModuleOptions());
final ModulesFactory factory = () -> Arrays.asList(dataModule, new DiscardAckModule());
- this.client = new AutoConnectClient(this.host, this.port, this.options.getProtocolOptions(), factory, this.stateListener);
+ final CountDownLatch latch = new CountDownLatch(1);
+ this.client = new AutoConnectClient(this.host, this.port, this.options.getProtocolOptions(), factory, new StateListener() {
+ @Override
+ public void stateChanged(final State state, final Throwable e) {
+ if (state == State.CONNECTED)
+ latch.countDown();
+ }
+ });
+ try {
+ latch.await(2000, TimeUnit.MILLISECONDS);
+ } catch (InterruptedException ex) {
+ // ignore
+ }
}
public void stop() throws Exception {