avoid other OF listeners overwriting the priority of another listener
diff --git a/of/api/src/main/java/org/onlab/onos/of/controller/DefaultOpenFlowPacketContext.java b/of/api/src/main/java/org/onlab/onos/of/controller/DefaultOpenFlowPacketContext.java
index d8cd715..529bc02 100644
--- a/of/api/src/main/java/org/onlab/onos/of/controller/DefaultOpenFlowPacketContext.java
+++ b/of/api/src/main/java/org/onlab/onos/of/controller/DefaultOpenFlowPacketContext.java
@@ -3,6 +3,7 @@
import static org.slf4j.LoggerFactory.getLogger;
import java.util.Collections;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.onlab.packet.Ethernet;
import org.projectfloodlight.openflow.protocol.OFPacketIn;
@@ -18,7 +19,7 @@
private final Logger log = getLogger(getClass());
- private boolean free = true;
+ private final AtomicBoolean free = new AtomicBoolean(true);
private boolean isBuilt = false;
private final OpenFlowSwitch sw;
private final OFPacketIn pktin;
@@ -30,14 +31,8 @@
}
@Override
- public void block() {
- free = false;
- }
-
- @Override
public void send() {
- if (free && isBuilt) {
- block();
+ if (blocked() && isBuilt) {
sw.sendMsg(pktout);
}
}
@@ -111,4 +106,9 @@
return act;
}
+ @Override
+ public boolean blocked() {
+ return free.getAndSet(false);
+ }
+
}
diff --git a/of/api/src/main/java/org/onlab/onos/of/controller/OpenFlowPacketContext.java b/of/api/src/main/java/org/onlab/onos/of/controller/OpenFlowPacketContext.java
index 73365e7..e1360e2 100644
--- a/of/api/src/main/java/org/onlab/onos/of/controller/OpenFlowPacketContext.java
+++ b/of/api/src/main/java/org/onlab/onos/of/controller/OpenFlowPacketContext.java
@@ -16,7 +16,7 @@
* Blocks further responses (ie. send() calls) on this
* packet in event.
*/
- public void block();
+ public boolean blocked();
/**
* Provided build has been called send the packet