[CORD-2228] Fix concurrent error when reactivate DHCP relay
Change-Id: Iad23ca690661055be78eadccb4c6926e5f4ea892
diff --git a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
index d49b9a9..d0a8214 100644
--- a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
+++ b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp4HandlerImpl.java
@@ -302,14 +302,13 @@
newServerInfo.setDhcpConnectVlan(host.vlan());
newServerInfo.setDhcpConnectMac(host.mac());
}
- // Add new server info
- serverInfoList.add(0, newServerInfo);
- // Remove duplicated server info
- Set<DhcpServerInfo> nonDupServerInfoList = Sets.newLinkedHashSet();
- nonDupServerInfoList.addAll(serverInfoList);
- serverInfoList.clear();
- serverInfoList.addAll(nonDupServerInfoList);
+ // Add new server info
+ synchronized (this) {
+ serverInfoList.clear();
+ serverInfoList.add(0, newServerInfo);
+ }
+
requestDhcpPacket(serverIp);
}
diff --git a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
index 7f35e82..dabd05b 100644
--- a/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
+++ b/apps/dhcprelay/src/main/java/org/onosproject/dhcprelay/Dhcp6HandlerImpl.java
@@ -1153,13 +1153,10 @@
newServerInfo.setDhcpConnectMac(host.mac());
}
// Add new server info
- serverInfoList.add(0, newServerInfo);
-
- // Remove duplicated server info
- Set<DhcpServerInfo> nonDupServerInfoList = Sets.newLinkedHashSet();
- nonDupServerInfoList.addAll(serverInfoList);
- serverInfoList.clear();
- serverInfoList.addAll(nonDupServerInfoList);
+ synchronized (this) {
+ serverInfoList.clear();
+ serverInfoList.add(0, newServerInfo);
+ }
requestDhcpPacket(serverIp);
}