Extra checks

This commit is contained in:
obscuren 2014-08-22 10:58:57 +02:00
parent 42d43147ca
commit a9f9a59416

@ -49,11 +49,11 @@ func (self *BlockPool) AddHash(hash []byte) {
}
}
func (self *BlockPool) SetBlock(b *ethchain.Block) {
func (self *BlockPool) SetBlock(b *ethchain.Block, peer *Peer) {
hash := string(b.Hash())
if self.pool[string(hash)] == nil {
self.pool[hash] = &block{nil, nil}
if self.pool[hash] == nil {
self.pool[hash] = &block{peer, nil}
}
self.pool[hash].block = b
@ -65,6 +65,10 @@ func (self *BlockPool) CheckLinkAndProcess(f func(block *ethchain.Block)) bool {
if self.IsLinked() {
for i, hash := range self.hashPool {
if self.pool[string(hash)] == nil {
continue
}
block := self.pool[string(hash)].block
if block != nil {
f(block)
@ -84,7 +88,7 @@ func (self *BlockPool) CheckLinkAndProcess(f func(block *ethchain.Block)) bool {
}
func (self *BlockPool) IsLinked() bool {
if len(self.hashPool) == 0 {
if len(self.hashPool) == 0 || self.pool[string(self.hashPool[0])] == nil {
return false
}
@ -104,7 +108,7 @@ func (self *BlockPool) Take(amount int, peer *Peer) (hashes [][]byte) {
j := 0
for i := 0; i < len(self.hashPool) && j < num; i++ {
hash := string(self.hashPool[i])
if self.pool[hash].peer == nil || self.pool[hash].peer == peer {
if self.pool[hash] != nil && (self.pool[hash].peer == nil || self.pool[hash].peer == peer) && self.pool[hash].block == nil {
self.pool[hash].peer = peer
hashes = append(hashes, self.hashPool[i])