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 }