forked from mirror/redis
rate_limit: break loop when pool is closed.
This commit is contained in:
parent
77d8805e91
commit
1c2b863036
6
pool.go
6
pool.go
|
@ -116,7 +116,10 @@ func newConnPool(dial func() (*conn, error), opt *options) *connPool {
|
|||
|
||||
func (p *connPool) new() (*conn, error) {
|
||||
select {
|
||||
case <-p.rl.C:
|
||||
case _, ok := <-p.rl.C:
|
||||
if !ok {
|
||||
return nil, errClosed
|
||||
}
|
||||
default:
|
||||
return nil, errRateLimited
|
||||
}
|
||||
|
@ -260,6 +263,7 @@ func (p *connPool) Close() error {
|
|||
return nil
|
||||
}
|
||||
p.closed = true
|
||||
close(p.rl.C)
|
||||
var retErr error
|
||||
for {
|
||||
e := p.conns.Front()
|
||||
|
|
|
@ -20,6 +20,9 @@ func newRateLimiter(limit time.Duration, chanSize int) *rateLimiter {
|
|||
}
|
||||
|
||||
func (rl *rateLimiter) loop(limit time.Duration) {
|
||||
defer func() {
|
||||
recover()
|
||||
}()
|
||||
for {
|
||||
select {
|
||||
case rl.C <- struct{}{}:
|
||||
|
|
Loading…
Reference in New Issue