forked from cerc-io/plugeth
eth/downloader: delete blocks from queue
This commit is contained in:
parent
15873fafc0
commit
8595198c1b
@ -354,6 +354,11 @@ func (d *Downloader) AddHashes(id string, hashes []common.Hash) error {
|
|||||||
return fmt.Errorf("received hashes from %s while active peer is %s", id, d.activePeer)
|
return fmt.Errorf("received hashes from %s while active peer is %s", id, d.activePeer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if glog.V(logger.Detail) && len(hashes) != 0 {
|
||||||
|
from, to := hashes[0], hashes[len(hashes)-1]
|
||||||
|
glog.Infof("adding %d (T=%d) hashes [ %x / %x ] from: %s\n", len(hashes), d.queue.hashPool.Size(), from[:4], to[:4], id)
|
||||||
|
}
|
||||||
|
|
||||||
d.hashCh <- hashes
|
d.hashCh <- hashes
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -448,10 +453,17 @@ func (d *Downloader) process(peer *peer) error {
|
|||||||
|
|
||||||
return ErrBadPeer
|
return ErrBadPeer
|
||||||
}
|
}
|
||||||
blocks = blocks[max:]
|
|
||||||
|
// delete the blocks from the slice and let them be garbage collected
|
||||||
|
// without this slice trick the blocks would stay in memory until nil
|
||||||
|
// would be assigned to d.queue.blocks
|
||||||
|
copy(blocks, blocks[max:])
|
||||||
|
for k, n := len(blocks)-max, len(blocks); k < n; k++ {
|
||||||
|
blocks[k] = nil
|
||||||
|
}
|
||||||
|
blocks = blocks[:len(blocks)-max]
|
||||||
}
|
}
|
||||||
|
|
||||||
// This will allow the GC to remove the in memory blocks
|
|
||||||
if len(blocks) == 0 {
|
if len(blocks) == 0 {
|
||||||
d.queue.blocks = nil
|
d.queue.blocks = nil
|
||||||
} else {
|
} else {
|
||||||
|
@ -455,7 +455,7 @@ func (pm *ProtocolManager) BroadcastBlock(hash common.Hash, block *types.Block)
|
|||||||
for _, peer := range peers {
|
for _, peer := range peers {
|
||||||
peer.sendNewBlock(block)
|
peer.sendNewBlock(block)
|
||||||
}
|
}
|
||||||
glog.V(logger.Detail).Infoln("broadcast block to", len(peers), "peers. Total propagation time:", time.Since(block.ReceivedAt))
|
glog.V(logger.Detail).Infoln("broadcast block to", len(peers), "peers. Total processing time:", time.Since(block.ReceivedAt))
|
||||||
}
|
}
|
||||||
|
|
||||||
// BroadcastTx will propagate the block to its connected peers. It will sort
|
// BroadcastTx will propagate the block to its connected peers. It will sort
|
||||||
|
Loading…
Reference in New Issue
Block a user