diff options
author | gluk256 <gluk256@gmail.com> | 2019-02-13 07:12:41 +0800 |
---|---|---|
committer | Viktor TrĂ³n <viktor.tron@gmail.com> | 2019-02-13 07:12:41 +0800 |
commit | b30109df3c7c56cb0d1752fc03f478474c3c190a (patch) | |
tree | 9dda4ef1949d6225759e30dc8d8486c2b120e946 | |
parent | 8771fbf3c8166ccd4ad98d3719604f9a2e8d6492 (diff) | |
download | go-tangerine-b30109df3c7c56cb0d1752fc03f478474c3c190a.tar go-tangerine-b30109df3c7c56cb0d1752fc03f478474c3c190a.tar.gz go-tangerine-b30109df3c7c56cb0d1752fc03f478474c3c190a.tar.bz2 go-tangerine-b30109df3c7c56cb0d1752fc03f478474c3c190a.tar.lz go-tangerine-b30109df3c7c56cb0d1752fc03f478474c3c190a.tar.xz go-tangerine-b30109df3c7c56cb0d1752fc03f478474c3c190a.tar.zst go-tangerine-b30109df3c7c56cb0d1752fc03f478474c3c190a.zip |
swarm/pss: mutex lifecycle fixed (#19045)
-rw-r--r-- | swarm/pss/protocol.go | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/swarm/pss/protocol.go b/swarm/pss/protocol.go index 5fcae090e..5f47ee47d 100644 --- a/swarm/pss/protocol.go +++ b/swarm/pss/protocol.go @@ -228,6 +228,7 @@ func ToP2pMsg(msg []byte) (p2p.Msg, error) { // to link the peer to. // The key must exist in the pss store prior to adding the peer. func (p *Protocol) AddPeer(peer *p2p.Peer, topic Topic, asymmetric bool, key string) (p2p.MsgReadWriter, error) { + var ok bool rw := &PssReadWriter{ Pss: p.Pss, rw: make(chan p2p.Msg), @@ -242,19 +243,21 @@ func (p *Protocol) AddPeer(peer *p2p.Peer, topic Topic, asymmetric bool, key str } if asymmetric { p.Pss.pubKeyPoolMu.Lock() - if _, ok := p.Pss.pubKeyPool[key]; !ok { + _, ok = p.Pss.pubKeyPool[key] + p.Pss.pubKeyPoolMu.Unlock() + if !ok { return nil, fmt.Errorf("asym key does not exist: %s", key) } - p.Pss.pubKeyPoolMu.Unlock() p.RWPoolMu.Lock() p.pubKeyRWPool[key] = rw p.RWPoolMu.Unlock() } else { p.Pss.symKeyPoolMu.Lock() - if _, ok := p.Pss.symKeyPool[key]; !ok { + _, ok = p.Pss.symKeyPool[key] + p.Pss.symKeyPoolMu.Unlock() + if !ok { return nil, fmt.Errorf("symkey does not exist: %s", key) } - p.Pss.symKeyPoolMu.Unlock() p.RWPoolMu.Lock() p.symKeyRWPool[key] = rw p.RWPoolMu.Unlock() |