From 9dc5683c565437cab6416d9eea72844e6ea87386 Mon Sep 17 00:00:00 2001 From: Ravi Sastry Kadali Date: Wed, 6 Aug 2025 20:15:44 -0700 Subject: [PATCH] scheduler: Fix memory leak in scheduler cache The `removeSlice` function was leaving behind references to the removed element, preventing it from being garbage-collected. This commit ensures that removed entries are fully cleared, eliminating the memory leak. Co-authored-by: ravisastryk Signed-off-by: Sujal Shah --- .../plugins/defaultpreemption/default_preemption.go | 8 +++++--- pkg/scheduler/framework/types.go | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go index bc3d55b49e6..b905e6915c2 100644 --- a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go +++ b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go @@ -235,9 +235,11 @@ func (pl *DefaultPreemption) SelectVictimsOnNode( for _, pi := range nodeInfo.GetPods() { if pl.isPreemptionAllowed(nodeInfo, pi, pod) { potentialVictims = append(potentialVictims, pi) - if err := removePod(pi); err != nil { - return nil, 0, fwk.AsStatus(err) - } + } + } + for _, pi := range potentialVictims { + if err := removePod(pi); err != nil { + return nil, 0, fwk.AsStatus(err) } } diff --git a/pkg/scheduler/framework/types.go b/pkg/scheduler/framework/types.go index 9e92527be17..30f5847f7e8 100644 --- a/pkg/scheduler/framework/types.go +++ b/pkg/scheduler/framework/types.go @@ -386,6 +386,8 @@ func removeFromSlice(logger klog.Logger, s []fwk.PodInfo, k string) ([]fwk.PodIn removedPod = s[i] // delete the element s[i] = s[len(s)-1] + // clear the reference to prevent potential memory leak + s[len(s)-1] = nil s = s[:len(s)-1] break }