Adds Cleanup method to safe.Pool

This commit is contained in:
Ed Robinson 2016-11-15 19:14:11 +00:00
parent 8ae9607d9b
commit 66e914a8ab
No known key found for this signature in database
GPG key ID: EC501FCA6421CCF0
2 changed files with 15 additions and 5 deletions

View file

@ -21,16 +21,18 @@ type Pool struct {
waitGroup sync.WaitGroup
lock sync.Mutex
baseCtx context.Context
baseCancel context.CancelFunc
ctx context.Context
cancel context.CancelFunc
}
// NewPool creates a Pool
func NewPool(parentCtx context.Context) *Pool {
baseCtx, _ := context.WithCancel(parentCtx)
baseCtx, baseCancel := context.WithCancel(parentCtx)
ctx, cancel := context.WithCancel(baseCtx)
return &Pool{
baseCtx: baseCtx,
baseCancel: baseCancel,
ctx: ctx,
cancel: cancel,
}
@ -90,6 +92,14 @@ func (p *Pool) Stop() {
}
}
// Cleanup releases resources used by the pool, and should be called when the pool will no longer be used
func (p *Pool) Cleanup() {
p.Stop()
p.lock.Lock()
defer p.lock.Unlock()
p.baseCancel()
}
// Start starts all stopped routines
func (p *Pool) Start() {
p.lock.Lock()

View file

@ -133,7 +133,7 @@ func (server *Server) Close() {
}
}(ctx)
server.stopLeadership()
server.routinesPool.Stop()
server.routinesPool.Cleanup()
close(server.configurationChan)
close(server.configurationValidatedChan)
signal.Stop(server.signals)