From dd69581cdec16160f4b9461ff0212737ce111db5 Mon Sep 17 00:00:00 2001 From: Michal Polkorab Date: Mon, 27 Oct 2014 17:59:11 +0100 Subject: [PATCH] Bug 2245 - Fixed critical issues - Array is stored directly - Wait not in loop - Naked notify Change-Id: Ifa9f431b84298d724351c89e8c330a69b8ab1ff3 Signed-off-by: Michal Polkorab --- .../protocol/impl/clients/ScenarioHandler.java | 9 +++++++++ .../protocol/impl/clients/SendEvent.java | 5 ++++- .../protocol/impl/clients/SimpleClient.java | 4 +++- .../protocol/impl/clients/UdpSimpleClient.java | 4 +++- .../protocol/impl/clients/WaitForMessageEvent.java | 12 ++++++++---- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/ScenarioHandler.java b/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/ScenarioHandler.java index 71f7be90..61333f87 100644 --- a/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/ScenarioHandler.java +++ b/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/ScenarioHandler.java @@ -30,6 +30,7 @@ public class ScenarioHandler extends Thread { private BlockingQueue ofMsg; private ChannelHandlerContext ctx; private int eventNumber; + private boolean scenarioFinished = false; /** * @@ -79,6 +80,7 @@ public class ScenarioHandler extends Thread { } LOGGER.debug("Scenario finished"); synchronized (this) { + scenarioFinished = true; this.notify(); } } @@ -117,4 +119,11 @@ public class ScenarioHandler extends Thread { public void addOfMsg(byte[] message) { ofMsg.add(message); } + + /** + * @return true is scenario is finished + */ + public boolean isScenarioFinished() { + return scenarioFinished; + } } diff --git a/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/SendEvent.java b/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/SendEvent.java index 5df57844..db339eb2 100644 --- a/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/SendEvent.java +++ b/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/SendEvent.java @@ -30,7 +30,10 @@ public class SendEvent implements ClientEvent { * @param msgToSend message to be sent */ public SendEvent(byte[] msgToSend) { - this.msgToSend = msgToSend; + this.msgToSend = new byte[msgToSend.length]; + for (int i = 0; i < msgToSend.length; i++) { + this.msgToSend[i] = msgToSend[i]; + } } @Override diff --git a/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/SimpleClient.java b/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/SimpleClient.java index fee80aa4..89854c7e 100644 --- a/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/SimpleClient.java +++ b/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/SimpleClient.java @@ -73,7 +73,9 @@ public class SimpleClient implements OFClient { synchronized (scenarioHandler) { LOGGER.debug("WAITING FOR SCENARIO"); - scenarioHandler.wait(); + while (! scenarioHandler.isScenarioFinished()) { + scenarioHandler.wait(); + } } } catch (Exception ex) { LOGGER.error(ex.getMessage(), ex); diff --git a/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/UdpSimpleClient.java b/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/UdpSimpleClient.java index 52dcb425..92e88672 100644 --- a/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/UdpSimpleClient.java +++ b/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/UdpSimpleClient.java @@ -74,7 +74,9 @@ public class UdpSimpleClient implements OFClient { synchronized (scenarioHandler) { LOGGER.debug("WAITING FOR SCENARIO"); - scenarioHandler.wait(); + while (! scenarioHandler.isScenarioFinished()) { + scenarioHandler.wait(); + } } } catch (Exception ex) { LOGGER.error(ex.getMessage(), ex); diff --git a/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/WaitForMessageEvent.java b/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/WaitForMessageEvent.java index 42ef75ab..c4c786c6 100644 --- a/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/WaitForMessageEvent.java +++ b/simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/WaitForMessageEvent.java @@ -28,7 +28,10 @@ public class WaitForMessageEvent implements ClientEvent { * @param headerExpected header (first 8 bytes) of expected message */ public WaitForMessageEvent(byte[] headerExpected) { - this.headerExpected = headerExpected; + this.headerExpected = new byte[headerExpected.length]; + for (int i = 0; i < headerExpected.length; i++) { + this.headerExpected[i] = headerExpected[i]; + } } @Override @@ -49,8 +52,9 @@ public class WaitForMessageEvent implements ClientEvent { * @param headerReceived header (first 8 bytes) of expected message */ public void setHeaderReceived(byte[] headerReceived) { - this.headerReceived = headerReceived; + this.headerReceived = new byte[headerReceived.length]; + for (int i = 0; i < headerReceived.length; i++) { + this.headerReceived[i] = headerReceived[i]; + } } - - } -- 2.36.6