Avoid Collection modification while iterating them

Change-Id: I3a1694182e232b67e907046ffd2aca64f0a76120
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
index 9acf727..07ab8af 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
@@ -87,6 +87,7 @@
 	/**
 	 * Run the thread.
 	 */
+	@Override
 	public void run() {
 	    Collection<EventEntry<TopologyEvent>> collection =
 		new LinkedList<EventEntry<TopologyEvent>>();
@@ -359,7 +360,7 @@
 			//PortEvent rmEvent = new PortEvent(p.getSwitch().getDpid(), p.getNumber());
 			// calling Discovery removePort() API to wipe from DB, etc.
 			//removePortEvent(rmEvent);
-		    
+
 		    // We can't remove ports here because this will trigger a remove
 		    // from the switch's port list, which we are currently iterating
 		    // over.
@@ -398,13 +399,18 @@
 		}
 
 		// Prep: Remove Link and Device Attachment
+		ArrayList<DeviceEvent> deviceEvts = new ArrayList<>();
 		for (Device device : port.getDevices()) {
 		    log.debug("Removing Device {} on Port {}", device, portEvt);
 		    DeviceEvent devEvt = new DeviceEvent(device.getMacAddress());
 		    devEvt.addAttachmentPoint(new SwitchPort(port.getSwitch().getDpid(), port.getNumber()));
+		    deviceEvts.add(devEvt);
+		}
+		for (DeviceEvent devEvt : deviceEvts) {
 		    // calling Discovery API to wipe from DB, etc.
 		    removeDeviceEvent(devEvt);
 		}
+
 		Set<Link> links = new HashSet<>();
 		links.add(port.getOutgoingLink());
 		links.add(port.getIncomingLink());
@@ -435,15 +441,18 @@
 	    }
 
 	    // Prep: remove Device attachment on both Ports
+	    ArrayList<DeviceEvent> deviceEvents = new ArrayList<>();
 	    for (Device device : srcPort.getDevices()) {
 		DeviceEvent devEvt = new DeviceEvent(device.getMacAddress());
 		devEvt.addAttachmentPoint(new SwitchPort(srcPort.getSwitch().getDpid(), srcPort.getNumber()));
-		// calling Discovery API to wipe from DB, etc.
-		removeDeviceEvent(devEvt);
+		deviceEvents.add(devEvt);
 	    }
 	    for (Device device : dstPort.getDevices()) {
 		DeviceEvent devEvt = new DeviceEvent(device.getMacAddress());
 		devEvt.addAttachmentPoint(new SwitchPort(dstPort.getSwitch().getDpid(), dstPort.getNumber()));
+		deviceEvents.add(devEvt);
+	    }
+	    for (DeviceEvent devEvt : deviceEvents) {
 		// calling Discovery API to wipe from DB, etc.
 		removeDeviceEvent(devEvt);
 	    }