Commit 0ce90358 authored by Esad Akar's avatar Esad Akar Committed by GitHub

fix: pslice variadic add index panic (#1899)

parent f2944470
......@@ -19,7 +19,6 @@ type PSlice struct {
peers []swarm.Address // the slice of peers
bins []uint // the indexes of every proximity order in the peers slice, index is po, value is index of peers slice
baseBytes []byte
sync.RWMutex
}
......@@ -179,7 +178,7 @@ func (s *PSlice) Add(addrs ...swarm.Address) {
return
}
po := swarm.Proximity(s.baseBytes, addr.Bytes())
po := s.po(addr.Bytes())
peers = insertAddresses(peers, int(s.bins[po]), addr)
s.peers = peers
......@@ -204,10 +203,20 @@ func (s *PSlice) Remove(addr swarm.Address) {
peers = append(peers[:i], peers[i+1:]...)
s.peers = peers
decDeeper(bins, swarm.Proximity(s.baseBytes, addr.Bytes()))
decDeeper(bins, s.po(addr.Bytes()))
s.bins = bins
}
func (s *PSlice) po(peer []byte) uint8 {
po := swarm.Proximity(s.baseBytes, peer)
if int(po) >= len(s.bins) {
return uint8(len(s.bins)) - 1
}
return po
}
// incDeeper increments the peers slice bin index for proximity order > po for non-empty bins only.
// Must be called under lock.
func incDeeper(bins []uint, po uint8) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment