Added thread safe each

pull/632/merge
obscuren 10 years ago
parent eff6a43419
commit c39484bc4b
  1. 11
      core/block_cache.go
  2. 8
      core/chain_manager.go

@ -88,3 +88,14 @@ func (bc *BlockCache) Has(hash common.Hash) bool {
_, ok := bc.blocks[hash] _, ok := bc.blocks[hash]
return ok return ok
} }
func (bc *BlockCache) Each(cb func(int, *types.Block)) {
bc.mu.Lock()
defer bc.mu.Unlock()
i := 0
for _, block := range bc.blocks {
cb(i, block)
i++
}
}

@ -438,9 +438,9 @@ type queueEvent struct {
func (self *ChainManager) procFutureBlocks() { func (self *ChainManager) procFutureBlocks() {
blocks := make([]*types.Block, len(self.futureBlocks.blocks)) blocks := make([]*types.Block, len(self.futureBlocks.blocks))
for i, hash := range self.futureBlocks.hashes { self.futureBlocks.Each(func(i int, block *types.Block) {
blocks[i] = self.futureBlocks.Get(hash) blocks[i] = block
} })
types.BlockBy(types.Number).Sort(blocks) types.BlockBy(types.Number).Sort(blocks)
self.InsertChain(blocks) self.InsertChain(blocks)
@ -536,7 +536,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
if len(chain) > 0 && glog.V(logger.Info) { if len(chain) > 0 && glog.V(logger.Info) {
start, end := chain[0], chain[len(chain)-1] start, end := chain[0], chain[len(chain)-1]
glog.Infof("imported %d blocks #%v [%x / %x]\n", len(chain), end.Number(), start.Hash().Bytes()[:4], end.Hash().Bytes()[:4]) glog.Infof("imported %d block(s) #%v [%x / %x]\n", len(chain), end.Number(), start.Hash().Bytes()[:4], end.Hash().Bytes()[:4])
} }
go self.eventMux.Post(queueEvent) go self.eventMux.Post(queueEvent)

Loading…
Cancel
Save