[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})
}