mirror of https://github.com/panjf2000/ants.git
opt: fix the potential goroutine leak after calling `Release()` (#287)
Co-authored-by: EL <evnldn9321@gmail.com>
This commit is contained in:
parent
45a0390a9f
commit
2806c4af7c
15
pool.go
15
pool.go
|
@ -276,6 +276,14 @@ func (p *Pool) Release() {
|
||||||
if !atomic.CompareAndSwapInt32(&p.state, OPENED, CLOSED) {
|
if !atomic.CompareAndSwapInt32(&p.state, OPENED, CLOSED) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if p.stopPurge != nil {
|
||||||
|
p.stopPurge()
|
||||||
|
p.stopPurge = nil
|
||||||
|
}
|
||||||
|
p.stopTicktock()
|
||||||
|
p.stopTicktock = nil
|
||||||
|
|
||||||
p.lock.Lock()
|
p.lock.Lock()
|
||||||
p.workers.reset()
|
p.workers.reset()
|
||||||
p.lock.Unlock()
|
p.lock.Unlock()
|
||||||
|
@ -289,13 +297,6 @@ func (p *Pool) ReleaseTimeout(timeout time.Duration) error {
|
||||||
if p.IsClosed() || (!p.options.DisablePurge && p.stopPurge == nil) || p.stopTicktock == nil {
|
if p.IsClosed() || (!p.options.DisablePurge && p.stopPurge == nil) || p.stopTicktock == nil {
|
||||||
return ErrPoolClosed
|
return ErrPoolClosed
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.stopPurge != nil {
|
|
||||||
p.stopPurge()
|
|
||||||
p.stopPurge = nil
|
|
||||||
}
|
|
||||||
p.stopTicktock()
|
|
||||||
p.stopTicktock = nil
|
|
||||||
p.Release()
|
p.Release()
|
||||||
|
|
||||||
endTime := time.Now().Add(timeout)
|
endTime := time.Now().Add(timeout)
|
||||||
|
|
15
pool_func.go
15
pool_func.go
|
@ -282,6 +282,14 @@ func (p *PoolWithFunc) Release() {
|
||||||
if !atomic.CompareAndSwapInt32(&p.state, OPENED, CLOSED) {
|
if !atomic.CompareAndSwapInt32(&p.state, OPENED, CLOSED) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if p.stopPurge != nil {
|
||||||
|
p.stopPurge()
|
||||||
|
p.stopPurge = nil
|
||||||
|
}
|
||||||
|
p.stopTicktock()
|
||||||
|
p.stopTicktock = nil
|
||||||
|
|
||||||
p.lock.Lock()
|
p.lock.Lock()
|
||||||
p.workers.reset()
|
p.workers.reset()
|
||||||
p.lock.Unlock()
|
p.lock.Unlock()
|
||||||
|
@ -295,13 +303,6 @@ func (p *PoolWithFunc) ReleaseTimeout(timeout time.Duration) error {
|
||||||
if p.IsClosed() || (!p.options.DisablePurge && p.stopPurge == nil) || p.stopTicktock == nil {
|
if p.IsClosed() || (!p.options.DisablePurge && p.stopPurge == nil) || p.stopTicktock == nil {
|
||||||
return ErrPoolClosed
|
return ErrPoolClosed
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.stopPurge != nil {
|
|
||||||
p.stopPurge()
|
|
||||||
p.stopPurge = nil
|
|
||||||
}
|
|
||||||
p.stopTicktock()
|
|
||||||
p.stopTicktock = nil
|
|
||||||
p.Release()
|
p.Release()
|
||||||
|
|
||||||
endTime := time.Now().Add(timeout)
|
endTime := time.Now().Add(timeout)
|
||||||
|
|
Loading…
Reference in New Issue