Fixes a regression introduced by 23223.

Additionally adds a cleanUp method for the pipeliners
to reset the internal states between different executions.
This was another regression introduced by 23223.

Fixes also a memory leak caused by re-init of the grouphandler
without terminating its internal references

Change-Id: I06e9e005110c5237cb3bdf893cc71975fb94281e
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java
index 07e4415..9799197 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OvsOfdpaPipeline.java
@@ -158,10 +158,24 @@
 
     @Override
     public void init(DeviceId deviceId, PipelinerContext context) {
-        if (!ready.getAndSet(true)) {
+        synchronized (this) {
+            if (isReady()) {
+                return;
+            }
+
+            // Terminate internal references
+            // We are terminating the references here
+            // because when the device is offline the apps
+            // are still sending flowobjectives
+            if (groupChecker != null) {
+                groupChecker.shutdown();
+            }
             // create a new executor at each init and a new empty queue
             groupChecker = Executors.newSingleThreadScheduledExecutor(groupedThreads("onos/driver",
                     "ovs-ofdpa-%d", log));
+            if (flowRuleQueue != null) {
+                flowRuleQueue.clear();
+            }
             flowRuleQueue = new ConcurrentLinkedQueue<>();
             groupCheckerLock = new ReentrantLock();
             groupChecker.scheduleAtFixedRate(new PopVlanPuntGroupChecker(), 20, 50, TimeUnit.MILLISECONDS);