Bug 2245 - Fixed critical issues 69/12269/1
authorMichal Polkorab <michal.polkorab@pantheon.sk>
Mon, 27 Oct 2014 16:59:11 +0000 (17:59 +0100)
committerMichal Polkorab <michal.polkorab@pantheon.sk>
Mon, 27 Oct 2014 17:08:05 +0000 (18:08 +0100)
 - Array is stored directly
 - Wait not in loop
 - Naked notify

Change-Id: Ifa9f431b84298d724351c89e8c330a69b8ab1ff3
Signed-off-by: Michal Polkorab <michal.polkorab@pantheon.sk>
simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/ScenarioHandler.java
simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/SendEvent.java
simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/SimpleClient.java
simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/UdpSimpleClient.java
simple-client/src/main/java/org/opendaylight/openflowjava/protocol/impl/clients/WaitForMessageEvent.java

index 71f7be9022b743b3011badf9115325466d677f63..61333f87272b3902b34550cb973990a138e8903b 100644 (file)
@@ -30,6 +30,7 @@ public class ScenarioHandler extends Thread {
     private BlockingQueue<byte[]> 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;
+    }
 }
index 5df57844c3848a44cc59b6fb213b724308524657..db339eb24fb5224e40a863fe826f1590265ba03a 100644 (file)
@@ -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
index fee80aa491d0b77445722e78fc4d61431d116cab..89854c7eff0a1a9a3ed5327203d3c8e21b403066 100644 (file)
@@ -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);
index 52dcb425a1dd32e72459c30bda412c77bb4fcab2..92e88672614c701b74c979fdb52e5b0ef1b24ae1 100644 (file)
@@ -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);
index 42ef75ab787ba3c2e1af25dfacd73f067cd901ed..c4c786c64ebf4f8ab997ecf0fe25895bd49d02aa 100644 (file)
@@ -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];
+        }
     }
-
-    
 }