From df3995844b593dc5a534b5c22af21935b5166cac Mon Sep 17 00:00:00 2001 From: w41ter Date: Wed, 11 Dec 2024 15:09:18 +0800 Subject: [PATCH] Fix be rpc leaks in rpc factory According to the golang document, the KeyType of a map may be any type that is comparable: 1. Two pointer values are equal if they point to the same variable or if both have value nil 2. Two struct values are equal if their corresponding non- blank field values are equal. --- pkg/rpc/rpc_factory.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/rpc/rpc_factory.go b/pkg/rpc/rpc_factory.go index 012e3960..2dac1608 100644 --- a/pkg/rpc/rpc_factory.go +++ b/pkg/rpc/rpc_factory.go @@ -20,14 +20,14 @@ type RpcFactory struct { feRpcs map[*base.Spec]IFeRpc feRpcsLock sync.Mutex - beRpcs map[*base.Backend]IBeRpc + beRpcs map[base.Backend]IBeRpc beRpcsLock sync.Mutex } func NewRpcFactory() IRpcFactory { return &RpcFactory{ feRpcs: make(map[*base.Spec]IFeRpc), - beRpcs: make(map[*base.Backend]IBeRpc), + beRpcs: make(map[base.Backend]IBeRpc), } } @@ -57,7 +57,7 @@ func (rf *RpcFactory) NewFeRpc(spec *base.Spec) (IFeRpc, error) { func (rf *RpcFactory) NewBeRpc(be *base.Backend) (IBeRpc, error) { rf.beRpcsLock.Lock() - if beRpc, ok := rf.beRpcs[be]; ok { + if beRpc, ok := rf.beRpcs[*be]; ok { rf.beRpcsLock.Unlock() return beRpc, nil } @@ -77,6 +77,6 @@ func (rf *RpcFactory) NewBeRpc(be *base.Backend) (IBeRpc, error) { rf.beRpcsLock.Lock() defer rf.beRpcsLock.Unlock() - rf.beRpcs[be] = beRpc + rf.beRpcs[*be] = beRpc return beRpc, nil }