Skip to content

Commit ef60172

Browse files
authored
Avoid memory leak (panjf2000#107)
1 parent 21f6323 commit ef60172

File tree

3 files changed

+8
-0
lines changed

3 files changed

+8
-0
lines changed

pool.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ func (p *Pool) purgePeriodically() {
8181
// are located on non-local CPUs.
8282
for i := range expiredWorkers {
8383
expiredWorkers[i].task <- nil
84+
expiredWorkers[i] = nil
8485
}
8586

8687
// There might be a situation that all workers have been cleaned up(no any worker is running)

worker_loop_queue.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ func (wq *loopQueue) detach() *goWorker {
6868
}
6969

7070
w := wq.items[wq.head]
71+
wq.items[wq.head] = nil
7172
wq.head++
7273
if wq.head == wq.size {
7374
wq.head = 0
@@ -90,6 +91,7 @@ func (wq *loopQueue) retrieveExpiry(duration time.Duration) []*goWorker {
9091
break
9192
}
9293
wq.expiry = append(wq.expiry, wq.items[wq.head])
94+
wq.items[wq.head] = nil
9395
wq.head++
9496
if wq.head == wq.size {
9597
wq.head = 0

worker_stack.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ func (wq *workerStack) detach() *goWorker {
3535
}
3636

3737
w := wq.items[l-1]
38+
wq.items[l-1] = nil // avoid memory leaks
3839
wq.items = wq.items[:l-1]
3940

4041
return w
@@ -53,6 +54,9 @@ func (wq *workerStack) retrieveExpiry(duration time.Duration) []*goWorker {
5354
if index != -1 {
5455
wq.expiry = append(wq.expiry, wq.items[:index+1]...)
5556
m := copy(wq.items, wq.items[index+1:])
57+
for i := m; i < n; i++ {
58+
wq.items[i] = nil
59+
}
5660
wq.items = wq.items[:m]
5761
}
5862
return wq.expiry
@@ -74,6 +78,7 @@ func (wq *workerStack) binarySearch(l, r int, expiryTime time.Time) int {
7478
func (wq *workerStack) reset() {
7579
for i := 0; i < wq.len(); i++ {
7680
wq.items[i].task <- nil
81+
wq.items[i] = nil
7782
}
7883
wq.items = wq.items[:0]
7984
}

0 commit comments

Comments
 (0)