prevent slice from holding reference to closure

This commit is contained in:
xtaci
2020-01-05 00:02:09 +08:00
parent 3b36308a0c
commit 9146e93d2d
+5
View File
@@ -26,6 +26,7 @@ func (h *timedFuncHeap) Pop() interface{} {
old := *h old := *h
n := len(old) n := len(old)
x := old[n-1] x := old[n-1]
old[n-1].execute = nil // avoid memory leak
*h = old[0 : n-1] *h = old[0 : n-1]
return x return x
} }
@@ -103,12 +104,16 @@ func (ts *TimedSched) prepend() {
} }
tasks = tasks[:len(ts.prependTasks)] tasks = tasks[:len(ts.prependTasks)]
copy(tasks, ts.prependTasks) copy(tasks, ts.prependTasks)
for k := range ts.prependTasks {
ts.prependTasks[k].execute = nil // avoid memory leak
}
ts.prependTasks = ts.prependTasks[:0] ts.prependTasks = ts.prependTasks[:0]
ts.prependLock.Unlock() ts.prependLock.Unlock()
for k := range tasks { for k := range tasks {
select { select {
case ts.chTask <- tasks[k]: case ts.chTask <- tasks[k]:
tasks[k].execute = nil // avoid memory leak
case <-ts.die: case <-ts.die:
return return
} }