From a0d36b2fe439a7f3f0444c0d32f56576e84eb7a1 Mon Sep 17 00:00:00 2001 From: Nguyen Ba Tam Date: Tue, 4 Dec 2018 14:10:18 +0700 Subject: [PATCH] fix err concurrent map read and write with signers --- consensus/posv/posv.go | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/consensus/posv/posv.go b/consensus/posv/posv.go index 142aec836f..7a61c3194c 100644 --- a/consensus/posv/posv.go +++ b/consensus/posv/posv.go @@ -806,23 +806,14 @@ func (c *Posv) UpdateMasternodes(chain consensus.ChainReader, header *types.Head if err != nil { return err } - currentSigners := snap.GetSigners() - proposedSigners := make(map[common.Address]struct{}) - // count all addresses in ms to be masternode + newSigners := make(map[common.Address]struct{}) for _, m := range ms { - proposedSigners[m.Address] = struct{}{} - snap.Signers[m.Address] = struct{}{} - } - // deactivate current masternodes which aren't in ms - for _, s := range currentSigners { - if _, ok := proposedSigners[s]; !ok { - delete(snap.Signers, s) - } + newSigners[m.Address] = struct{}{} } + snap.Signers = newSigners nm := []string{} - newSigners := snap.GetSigners() - for _, n := range newSigners { - nm = append(nm, n.String()) + for _, n := range ms { + nm = append(nm, n.Address.String()) } c.recents.Add(snap.Hash, snap) log.Info("New set of masternodes has been updated to snapshot", "number", snap.Number, "hash", snap.Hash, "new masternodes", nm)