Merge pull request #862 from tamird/fix-conn-leak-again

Avoid goroutine leak in clientconn
This commit is contained in:
Qi Zhao
2016-08-25 14:36:05 -07:00
committed by GitHub

View File

@ -234,13 +234,13 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *
defer func() { defer func() {
select { select {
case <-ctx.Done(): case <-ctx.Done():
if conn != nil { conn, err = nil, ctx.Err()
conn.Close()
}
conn = nil
err = ctx.Err()
default: default:
} }
if err != nil {
cc.Close()
}
}() }()
for _, opt := range opts { for _, opt := range opts {
@ -296,11 +296,9 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *
return nil, ctx.Err() return nil, ctx.Err()
case err := <-waitC: case err := <-waitC:
if err != nil { if err != nil {
cc.Close()
return nil, err return nil, err
} }
case <-timeoutCh: case <-timeoutCh:
cc.Close()
return nil, ErrClientConnTimeout return nil, ErrClientConnTimeout
} }
// If balancer is nil or balancer.Notify() is nil, ok will be false here. // If balancer is nil or balancer.Notify() is nil, ok will be false here.