From 2a69aaf976f4e4606702fdd27f40992a758b1938 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Mon, 21 Mar 2022 15:07:55 +0300 Subject: [PATCH] [#1157] network/cache: Optimize `client` fetch from `multiClient` Signed-off-by: Evgenii Stratonikov --- pkg/network/cache/multi.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/pkg/network/cache/multi.go b/pkg/network/cache/multi.go index bb36b2ab7..da9aa3927 100644 --- a/pkg/network/cache/multi.go +++ b/pkg/network/cache/multi.go @@ -235,16 +235,21 @@ func (x *multiClient) RawForAddress(addr network.Address, f func(client *rawclie } func (x *multiClient) client(addr network.Address) clientcore.Client { - x.mtx.Lock() - strAddr := addr.String() + x.mtx.RLock() c, cached := x.clients[strAddr] - if !cached { - c = x.createForAddress(addr) - } + x.mtx.RUnlock() - x.mtx.Unlock() + if !cached { + x.mtx.Lock() + + c, cached = x.clients[strAddr] + if !cached { + c = x.createForAddress(addr) + } + x.mtx.Unlock() + } return c }