FIX_FOR_ONOS-5610

Change-Id: Ibb277628ad60c90fe2ebaf4a2d6ef123fbb8a764
(cherry picked from commit 00ded542dbf467097f38dd5006c8904a18e06434)
diff --git a/providers/openflow/message/src/main/java/org/onosproject/provider/of/message/impl/OpenFlowControlMessageProvider.java b/providers/openflow/message/src/main/java/org/onosproject/provider/of/message/impl/OpenFlowControlMessageProvider.java
index a2e21dc..c63d042 100644
--- a/providers/openflow/message/src/main/java/org/onosproject/provider/of/message/impl/OpenFlowControlMessageProvider.java
+++ b/providers/openflow/message/src/main/java/org/onosproject/provider/of/message/impl/OpenFlowControlMessageProvider.java
@@ -107,6 +107,7 @@
 
     @Deactivate
     protected void deactivate() {
+        disconnectDevices();
         controller.removeListener(listener);
         providerRegistry.unregister(this);
         providerService = null;
@@ -128,6 +129,17 @@
         }
     }
 
+    private void disconnectDevices() {
+        for (OpenFlowSwitch sw: controller.getSwitches()) {
+            try {
+                listener.switchRemoved(new Dpid(sw.getId()));
+            } catch (Exception e) {
+                log.warn("Failed to remove {} : {}", sw.getStringId(), e.getMessage());
+                log.debug("Error details:", e);
+            }
+        }
+    }
+
     /**
      * A listener for OpenFlow switch event.
      */