diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java index 626109a7cb..704db9ad4e 100644 --- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java +++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java @@ -463,9 +463,12 @@ public class DeviceConfiguration implements DeviceProperties { */ public Set getSubnets(DeviceId deviceId) { SegmentRouterInfo srinfo = deviceConfigMap.get(deviceId); - if (srinfo != null) { + if (srinfo != null && srinfo.subnets != null) { + // Note: ImmutableSet.Builder.addAll calls the iterator of parameter internally, + // which is not protected by SynchronizedCollection mutex. ImmutableSet.Builder builder = ImmutableSet.builder(); - return builder.addAll(srinfo.subnets.values()).build(); + srinfo.subnets.forEach((k, v) -> builder.add(v)); + return builder.build(); } return null; }