Merge pull request #38 from go-redis/fix/close_rate_limiter_loop

rate_limit: break loop when pool is closed.
This commit is contained in:
Vladimir Mihailenco 2014-09-04 10:53:35 +03:00
commit 593d5d1d77
2 changed files with 8 additions and 1 deletions

View File

@ -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()

View File

@ -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{}{}: