mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 18:32:23 +00:00
fix err concurrent map read and write with signers
This commit is contained in:
parent
1e930fdb95
commit
a0d36b2fe4
1 changed files with 5 additions and 14 deletions
|
|
@ -806,23 +806,14 @@ func (c *Posv) UpdateMasternodes(chain consensus.ChainReader, header *types.Head
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
currentSigners := snap.GetSigners()
|
newSigners := make(map[common.Address]struct{})
|
||||||
proposedSigners := make(map[common.Address]struct{})
|
|
||||||
// count all addresses in ms to be masternode
|
|
||||||
for _, m := range ms {
|
for _, m := range ms {
|
||||||
proposedSigners[m.Address] = struct{}{}
|
newSigners[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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
snap.Signers = newSigners
|
||||||
nm := []string{}
|
nm := []string{}
|
||||||
newSigners := snap.GetSigners()
|
for _, n := range ms {
|
||||||
for _, n := range newSigners {
|
nm = append(nm, n.Address.String())
|
||||||
nm = append(nm, n.String())
|
|
||||||
}
|
}
|
||||||
c.recents.Add(snap.Hash, snap)
|
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)
|
log.Info("New set of masternodes has been updated to snapshot", "number", snap.Number, "hash", snap.Hash, "new masternodes", nm)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue