mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-07 15:10:01 +08:00
fix memory leak of grpc resolver (#4490)
Co-authored-by: nk <kui.niu@akuvox.com>
This commit is contained in:
@@ -38,7 +38,7 @@ func (b *discovBuilder) Build(target resolver.Target, cc resolver.ClientConn, _
|
||||
sub.AddListener(update)
|
||||
update()
|
||||
|
||||
return &nopResolver{cc: cc}, nil
|
||||
return &nopResolver{cc: cc, closeFunc: func() { sub.Close() }}, nil
|
||||
}
|
||||
|
||||
func (b *discovBuilder) Scheme() string {
|
||||
|
||||
@@ -37,10 +37,14 @@ func register() {
|
||||
}
|
||||
|
||||
type nopResolver struct {
|
||||
cc resolver.ClientConn
|
||||
cc resolver.ClientConn
|
||||
closeFunc func()
|
||||
}
|
||||
|
||||
func (r *nopResolver) Close() {
|
||||
if r.closeFunc != nil {
|
||||
r.closeFunc()
|
||||
}
|
||||
}
|
||||
|
||||
func (r *nopResolver) ResolveNow(_ resolver.ResolveNowOptions) {
|
||||
|
||||
@@ -18,6 +18,20 @@ func TestNopResolver(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestNopResolver_Close(t *testing.T) {
|
||||
var isChanged bool
|
||||
r := nopResolver{}
|
||||
r.Close()
|
||||
assert.False(t, isChanged)
|
||||
r = nopResolver{
|
||||
closeFunc: func() {
|
||||
isChanged = true
|
||||
},
|
||||
}
|
||||
r.Close()
|
||||
assert.True(t, isChanged)
|
||||
}
|
||||
|
||||
type mockedClientConn struct {
|
||||
state resolver.State
|
||||
err error
|
||||
|
||||
Reference in New Issue
Block a user