From 2c142c52482c5f5ca7f1b0e83d20b866c19a8e22 Mon Sep 17 00:00:00 2001 From: Ray Milkey Date: Thu, 16 Nov 2017 16:46:04 -0800 Subject: [PATCH] Fix race condition - if the device manager is not ready when a packet arrives, drop it rather than NPE Change-Id: I601b4ce1d449b169059a3390441dcfa58b800db3 --- .../org/onosproject/net/packet/impl/PacketDriverProvider.java | 4 ++++ .../java/org/onosproject/net/packet/impl/PacketManager.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketDriverProvider.java b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketDriverProvider.java index 78d1a75f53..be9551f283 100644 --- a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketDriverProvider.java +++ b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketDriverProvider.java @@ -61,6 +61,10 @@ public class PacketDriverProvider extends AbstractProvider implements PacketProv } private PacketProgrammable getPacketProgrammable(DeviceId deviceId) { + if (deviceService == null) { + log.debug("Packet encountered but device service is not ready, dropping"); + return null; + } Device device = deviceService.getDevice(deviceId); if (device.is(PacketProgrammable.class)) { return device.as(PacketProgrammable.class); diff --git a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java index bace76363e..1ecf5b4a84 100644 --- a/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java +++ b/core/net/src/main/java/org/onosproject/net/packet/impl/PacketManager.java @@ -130,8 +130,8 @@ public class PacketManager appId = coreService.getAppId(CoreService.CORE_APP_NAME); store.setDelegate(delegate); deviceService.addListener(deviceListener); - store.existingRequests().forEach(this::pushToAllDevices); defaultProvider.init(deviceService); + store.existingRequests().forEach(this::pushToAllDevices); log.info("Started"); }