Refining driver subsystem to facilitate coordinated start-up.

- for ONOS-6402

Change-Id: I7f64fc62ad1d451fcf55624b2422b60631a3c8e8
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java
index 62b77de..1777cbc 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java
@@ -63,10 +63,10 @@
 /**
  * Provides implementation of the meter service APIs.
  */
-@Component(immediate = true, enabled = true)
+@Component(immediate = true)
 @Service
-public class MeterManager extends AbstractListenerProviderRegistry<MeterEvent, MeterListener,
-        MeterProvider, MeterProviderService>
+public class MeterManager
+        extends AbstractListenerProviderRegistry<MeterEvent, MeterListener, MeterProvider, MeterProviderService>
         implements MeterService, MeterProviderRegistry {
 
     private static final String METERCOUNTERIDENTIFIER = "meter-id-counter-%s";
@@ -89,7 +89,6 @@
 
     @Activate
     public void activate() {
-
         store.setDelegate(delegate);
         eventDispatcher.addSink(MeterEvent.class, listenerRegistry);
 
@@ -113,6 +112,7 @@
     @Deactivate
     public void deactivate() {
         store.unsetDelegate(delegate);
+        eventDispatcher.removeSink(MeterEvent.class);
         log.info("Stopped");
     }
 
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/provider/DefaultVirtualPacketProvider.java b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/provider/DefaultVirtualPacketProvider.java
index 63c3cc2..5eaa3b0 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/provider/DefaultVirtualPacketProvider.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/virtual/impl/provider/DefaultVirtualPacketProvider.java
@@ -96,17 +96,14 @@
 
     /**
      * Creates a provider with the supplied identifier.
-     *
      */
     public DefaultVirtualPacketProvider() {
-        super(new ProviderId("virtual-packet",
-                             "org.onosproject.virtual.virtual-packet"));
+        super(new ProviderId("virtual-packet", "org.onosproject.virtual.virtual-packet"));
     }
 
     @Activate
     public void activate() {
-        appId = coreService.registerApplication(
-                "org.onosproject.virtual.virtual-packet");
+        appId = coreService.registerApplication("org.onosproject.virtual.virtual-packet");
         providerRegistryService.registerProvider(this);
 
         contextMap = Maps.newConcurrentMap();
@@ -119,6 +116,7 @@
         if (processor != null) {
             packetService.removeProcessor(processor);
         }
+        providerRegistryService.unregisterProvider(this);
         log.info("Stopped");
     }
 
@@ -136,7 +134,6 @@
     @Override
     public void startPacketHandling(NetworkId networkId) {
         requestsSet.add(networkId);
-
         if (processor == null) {
             processor = new InternalPacketProcessor();
             packetService.addProcessor(processor, PACKET_PROCESSOR_PRIORITY);
@@ -146,7 +143,6 @@
     @Override
     public void stopPacketHandling(NetworkId networkId) {
         requestsSet.remove(networkId);
-
         if (requestsSet.isEmpty()) {
             packetService.removeProcessor(processor);
             processor = null;