Lines Matching refs:wp

47 func (wp *workerPool) Start() {
48 if wp.stopCh != nil {
51 wp.stopCh = make(chan struct{})
52 stopCh := wp.stopCh
56 wp.clean(&scratch)
61 time.Sleep(wp.getMaxIdleWorkerDuration())
67 func (wp *workerPool) Stop() {
68 if wp.stopCh == nil {
71 close(wp.stopCh)
72 wp.stopCh = nil
77 wp.lock.Lock()
78 ready := wp.ready
83 wp.ready = ready[:0]
84 wp.mustStop = true
85 wp.lock.Unlock()
88 func (wp *workerPool) getMaxIdleWorkerDuration() time.Duration {
89 if wp.MaxIdleWorkerDuration <= 0 {
92 return wp.MaxIdleWorkerDuration
95 func (wp *workerPool) clean(scratch *[]*workerChan) {
96 maxIdleWorkerDuration := wp.getMaxIdleWorkerDuration()
102 wp.lock.Lock()
103 ready := wp.ready
115 wp.ready = ready[:m]
117 wp.lock.Unlock()
130 func (wp *workerPool) Serve(c net.Conn) bool {
131 ch := wp.getCh()
153 func (wp *workerPool) getCh() *workerChan {
157 wp.lock.Lock()
158 ready := wp.ready
161 if wp.workersCount < wp.MaxWorkersCount {
163 wp.workersCount++
168 wp.ready = ready[:n]
170 wp.lock.Unlock()
176 vch := wp.workerChanPool.Get()
184 wp.workerFunc(ch)
185 wp.workerChanPool.Put(vch)
191 func (wp *workerPool) release(ch *workerChan) bool {
193 wp.lock.Lock()
194 if wp.mustStop {
195 wp.lock.Unlock()
198 wp.ready = append(wp.ready, ch)
199 wp.lock.Unlock()
203 func (wp *workerPool) workerFunc(ch *workerChan) {
212 if err = wp.WorkerFunc(c); err != nil && err != errHijacked {
214 if wp.LogAllErrors || !(strings.Contains(errStr, "broken pipe") ||
218wp.Logger.Printf("error when serving connection %q<->%q: %s", c.LocalAddr(), c.RemoteAddr(), err)
222 wp.connState(c, StateHijacked)
225 wp.connState(c, StateClosed)
229 if !wp.release(ch) {
234 wp.lock.Lock()
235 wp.workersCount--
236 wp.lock.Unlock()