aboutsummaryrefslogtreecommitdiffstats
path: root/miner/worker.go
diff options
context:
space:
mode:
Diffstat (limited to 'miner/worker.go')
-rw-r--r--miner/worker.go13
1 files changed, 11 insertions, 2 deletions
diff --git a/miner/worker.go b/miner/worker.go
index e21765f9d..d96da9829 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -9,11 +9,11 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
+ "github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/pow"
- "github.com/ethereum/go-ethereum/core/state"
"gopkg.in/fatih/set.v0"
)
@@ -199,6 +199,8 @@ func (self *worker) push() {
func (self *worker) commitNewWork() {
self.mu.Lock()
defer self.mu.Unlock()
+ self.uncleMu.Lock()
+ defer self.uncleMu.Unlock()
block := self.chain.NewBlock(self.coinbase)
@@ -241,7 +243,10 @@ gasLimit:
}
self.eth.TxPool().RemoveSet(remove)
- var uncles []*types.Header
+ var (
+ uncles []*types.Header
+ badUncles []common.Hash
+ )
for hash, uncle := range self.possibleUncles {
if len(uncles) == 2 {
break
@@ -250,12 +255,16 @@ gasLimit:
if err := self.commitUncle(uncle.Header()); err != nil {
minerlogger.Infof("Bad uncle found and will be removed (%x)\n", hash[:4])
minerlogger.Debugln(uncle)
+ badUncles = append(badUncles, hash)
} else {
minerlogger.Infof("commiting %x as uncle\n", hash[:4])
uncles = append(uncles, uncle.Header())
}
}
minerlogger.Infof("commit new work with %d txs & %d uncles\n", tcount, len(uncles))
+ for _, hash := range badUncles {
+ delete(self.possibleUncles, hash)
+ }
self.current.block.SetUncles(uncles)