diff --git a/pool.go b/pool.go index d5069ef..53471e2 100644 --- a/pool.go +++ b/pool.go @@ -74,7 +74,7 @@ func (p *Pool) monitorAndClear() { break } n = i - w.stop() + w.task <- nil idleWorkers[i] = nil p.running-- } @@ -118,7 +118,7 @@ func (p *Pool) Submit(task f) error { return ErrPoolClosed } w := p.getWorker() - w.sendTask(task) + w.task <- task return nil } @@ -143,11 +143,12 @@ func (p *Pool) Release() error { p.release <- sig{} running := p.Running() for i := 0; i < running; i++ { - p.getWorker().stop() + p.getWorker().task <- nil } for i := range p.workers { p.workers[i] = nil } + p.workers = nil }) return nil } @@ -157,7 +158,7 @@ func (p *Pool) ReSize(size int) { if size < p.Cap() { diff := p.Cap() - size for i := 0; i < diff; i++ { - p.getWorker().stop() + p.getWorker().task <- nil } } else if size == p.Cap() { return diff --git a/pool_func.go b/pool_func.go index b2ef61e..d99269f 100644 --- a/pool_func.go +++ b/pool_func.go @@ -75,7 +75,7 @@ func (p *PoolWithFunc) monitorAndClear() { break } n = i - w.stop() + w.args <- nil idleWorkers[i] = nil p.running-- } @@ -123,7 +123,7 @@ func (p *PoolWithFunc) Serve(args interface{}) error { return ErrPoolClosed } w := p.getWorker() - w.sendTask(args) + w.args <- args return nil } @@ -148,11 +148,12 @@ func (p *PoolWithFunc) Release() error { p.release <- sig{} running := p.Running() for i := 0; i < running; i++ { - p.getWorker().stop() + p.getWorker().args <- nil } for i := range p.workers { p.workers[i] = nil } + p.workers = nil }) return nil } @@ -162,7 +163,7 @@ func (p *PoolWithFunc) ReSize(size int) { if size < p.Cap() { diff := p.Cap() - size for i := 0; i < diff; i++ { - p.getWorker().stop() + p.getWorker().args <- nil } } else if size == p.Cap() { return diff --git a/worker.go b/worker.go index babb8af..9031f57 100644 --- a/worker.go +++ b/worker.go @@ -56,13 +56,3 @@ func (w *Worker) run() { } }() } - -// stop this worker. -func (w *Worker) stop() { - w.sendTask(nil) -} - -// sendTask sends a task to this worker. -func (w *Worker) sendTask(task f) { - w.task <- task -} diff --git a/worker_func.go b/worker_func.go index 6467bac..a3b5bb6 100644 --- a/worker_func.go +++ b/worker_func.go @@ -56,13 +56,3 @@ func (w *WorkerWithFunc) run() { } }() } - -// stop this worker. -func (w *WorkerWithFunc) stop() { - w.sendTask(nil) -} - -// sendTask sends a task to this worker. -func (w *WorkerWithFunc) sendTask(args interface{}) { - w.args <- args -}