fix memory leak of grpc resolver (#4490)

Co-authored-by: nk <kui.niu@akuvox.com>
This commit is contained in:
saury
2025-01-22 13:36:13 +08:00
committed by GitHub
parent b650c8c425
commit 17d98f69e0
6 changed files with 86 additions and 16 deletions

View File

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

View File

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

View File

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