From 3f028c937b1bce3ffb4e45b25c2924a20c4d6482 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Fri, 22 Oct 2021 15:51:34 +0200 Subject: [PATCH] reduce mutex contention in SetProtocols --- pstoreds/protobook.go | 10 +++++----- pstoremem/protobook.go | 9 ++++----- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pstoreds/protobook.go b/pstoreds/protobook.go index 6518c4e..e451af5 100644 --- a/pstoreds/protobook.go +++ b/pstoreds/protobook.go @@ -4,7 +4,7 @@ import ( "fmt" "sync" - peer "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/peer" pstore "github.com/libp2p/go-libp2p-core/peerstore" ) @@ -43,15 +43,15 @@ func (pb *dsProtoBook) SetProtocols(p peer.ID, protos ...string) error { return err } - s := pb.segments.get(p) - s.Lock() - defer s.Unlock() - protomap := make(map[string]struct{}, len(protos)) for _, proto := range protos { protomap[proto] = struct{}{} } + s := pb.segments.get(p) + s.Lock() + defer s.Unlock() + return pb.meta.Put(p, "protocols", protomap) } diff --git a/pstoremem/protobook.go b/pstoremem/protobook.go index 1042825..f7cfcfc 100644 --- a/pstoremem/protobook.go +++ b/pstoremem/protobook.go @@ -3,7 +3,7 @@ package pstoremem import ( "sync" - peer "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/peer" pstore "github.com/libp2p/go-libp2p-core/peerstore" ) @@ -71,16 +71,15 @@ func (pb *memoryProtoBook) SetProtocols(p peer.ID, protos ...string) error { return err } - s := pb.segments.get(p) - s.Lock() - defer s.Unlock() - newprotos := make(map[string]struct{}, len(protos)) for _, proto := range protos { newprotos[pb.internProtocol(proto)] = struct{}{} } + s := pb.segments.get(p) + s.Lock() s.protocols[p] = newprotos + s.Unlock() return nil }