[VOL-4931] openoltAdapter: memory leak seen in long term tests

Change-Id: Ieb60bd9b4bdf88fc22a3b6704854591c0c30717d
diff --git a/internal/pkg/core/openolt_flowmgr.go b/internal/pkg/core/openolt_flowmgr.go
index b06af00..087f234 100644
--- a/internal/pkg/core/openolt_flowmgr.go
+++ b/internal/pkg/core/openolt_flowmgr.go
@@ -216,6 +216,13 @@
 	flowHandlerRoutineActive []bool
 }
 
+// CloseKVClient closes open KV clients
+func (f *OpenOltFlowMgr) CloseKVClient(ctx context.Context) {
+	if f.techprofile != nil {
+		f.techprofile.CloseKVClient(ctx)
+	}
+}
+
 //NewFlowManager creates OpenOltFlowMgr object and initializes the parameters
 func NewFlowManager(ctx context.Context, dh *DeviceHandler, rMgr *rsrcMgr.OpenOltResourceMgr, grpMgr *OpenOltGroupMgr, ponPortIdx uint32) *OpenOltFlowMgr {
 	logger.Infow(ctx, "initializing-flow-manager", log.Fields{"device-id": dh.device.Id})
@@ -2313,7 +2320,19 @@
 				logger.Warnw(ctx, "timeout stopping flow handler routine", log.Fields{"onuID": i, "deviceID": f.deviceHandler.device.Id})
 			}
 		}
+		f.stopFlowHandlerRoutine[i] = nil
 	}
+	f.stopFlowHandlerRoutine = nil
+
+	if f.incomingFlows != nil {
+		for k := range f.incomingFlows {
+			if f.incomingFlows[k] != nil {
+				f.incomingFlows[k] = nil
+			}
+		}
+		f.incomingFlows = nil
+	}
+
 	wg.Done()
 	logger.Debugw(ctx, "stopped all flow handler routines", log.Fields{"ponPortIdx": f.ponPortIdx})
 }