提交 0bd63633 作者: Juan Batiz-Benet

dht/kbucket: race condition fix

上级 87458f6d
...@@ -19,6 +19,17 @@ func newBucket() *Bucket { ...@@ -19,6 +19,17 @@ func newBucket() *Bucket {
return b return b
} }
func (b *Bucket) Peers() []peer.ID {
b.lk.RLock()
defer b.lk.RUnlock()
ps := make([]peer.ID, 0, b.list.Len())
for e := b.list.Front(); e != nil; e = e.Next() {
id := e.Value.(peer.ID)
ps = append(ps, id)
}
return ps
}
func (b *Bucket) find(id peer.ID) *list.Element { func (b *Bucket) find(id peer.ID) *list.Element {
b.lk.RLock() b.lk.RLock()
defer b.lk.RUnlock() defer b.lk.RUnlock()
...@@ -81,7 +92,3 @@ func (b *Bucket) Split(cpl int, target ID) *Bucket { ...@@ -81,7 +92,3 @@ func (b *Bucket) Split(cpl int, target ID) *Bucket {
} }
return newbuck return newbuck
} }
func (b *Bucket) getIter() *list.Element {
return b.list.Front()
}
...@@ -176,11 +176,11 @@ func (rt *RoutingTable) Size() int { ...@@ -176,11 +176,11 @@ func (rt *RoutingTable) Size() int {
// NOTE: This is potentially unsafe... use at your own risk // NOTE: This is potentially unsafe... use at your own risk
func (rt *RoutingTable) ListPeers() []peer.ID { func (rt *RoutingTable) ListPeers() []peer.ID {
var peers []peer.ID var peers []peer.ID
rt.tabLock.RLock()
for _, buck := range rt.Buckets { for _, buck := range rt.Buckets {
for e := buck.getIter(); e != nil; e = e.Next() { peers = append(peers, buck.Peers()...)
peers = append(peers, e.Value.(peer.ID))
}
} }
rt.tabLock.RUnlock()
return peers return peers
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论