forked from cerc-io/plugeth
Merge pull request #27 from openrelayxyz/bugfix/freezer-leak
Bugfix/freezer leak
This commit is contained in:
commit
47e8d073da
@ -190,6 +190,7 @@ type metaTracer struct {
|
||||
}
|
||||
|
||||
func (mt *metaTracer) PreProcessBlock(block *types.Block) {
|
||||
if len(mt.tracers) == 0 { return }
|
||||
blockHash := core.Hash(block.Hash())
|
||||
blockNumber := block.NumberU64()
|
||||
encoded, _ := rlp.EncodeToBytes(block)
|
||||
@ -198,6 +199,7 @@ func (mt *metaTracer) PreProcessBlock(block *types.Block) {
|
||||
}
|
||||
}
|
||||
func (mt *metaTracer) PreProcessTransaction(tx *types.Transaction, block *types.Block, i int) {
|
||||
if len(mt.tracers) == 0 { return }
|
||||
blockHash := core.Hash(block.Hash())
|
||||
transactionHash := core.Hash(tx.Hash())
|
||||
for _, tracer := range mt.tracers {
|
||||
@ -205,6 +207,7 @@ func (mt *metaTracer) PreProcessTransaction(tx *types.Transaction, block *types.
|
||||
}
|
||||
}
|
||||
func (mt *metaTracer) BlockProcessingError(tx *types.Transaction, block *types.Block, err error) {
|
||||
if len(mt.tracers) == 0 { return }
|
||||
blockHash := core.Hash(block.Hash())
|
||||
transactionHash := core.Hash(tx.Hash())
|
||||
for _, tracer := range mt.tracers {
|
||||
@ -212,6 +215,7 @@ func (mt *metaTracer) BlockProcessingError(tx *types.Transaction, block *types.B
|
||||
}
|
||||
}
|
||||
func (mt *metaTracer) PostProcessTransaction(tx *types.Transaction, block *types.Block, i int, receipt *types.Receipt) {
|
||||
if len(mt.tracers) == 0 { return }
|
||||
blockHash := core.Hash(block.Hash())
|
||||
transactionHash := core.Hash(tx.Hash())
|
||||
receiptBytes, _ := json.Marshal(receipt)
|
||||
@ -220,6 +224,7 @@ func (mt *metaTracer) PostProcessTransaction(tx *types.Transaction, block *types
|
||||
}
|
||||
}
|
||||
func (mt *metaTracer) PostProcessBlock(block *types.Block) {
|
||||
if len(mt.tracers) == 0 { return }
|
||||
blockHash := core.Hash(block.Hash())
|
||||
for _, tracer := range mt.tracers {
|
||||
tracer.PostProcessBlock(blockHash)
|
||||
@ -258,7 +263,7 @@ func (mt *metaTracer) CaptureExit(output []byte, gasUsed uint64, err error) {
|
||||
}
|
||||
}
|
||||
|
||||
func PluginGetBlockTracer(pl *plugins.PluginLoader, hash common.Hash, statedb *state.StateDB) *metaTracer {
|
||||
func PluginGetBlockTracer(pl *plugins.PluginLoader, hash common.Hash, statedb *state.StateDB) (*metaTracer, bool) {
|
||||
//look for a function that takes whatever the ctx provides and statedb and returns a core.blocktracer append into meta tracer
|
||||
tracerList := plugins.Lookup("GetLiveTracer", func(item interface{}) bool {
|
||||
_, ok := item.(func(core.Hash, core.StateDB) core.BlockTracer)
|
||||
@ -274,12 +279,12 @@ func PluginGetBlockTracer(pl *plugins.PluginLoader, hash common.Hash, statedb *s
|
||||
}
|
||||
}
|
||||
}
|
||||
return mt
|
||||
return mt, (len(mt.tracers) > 0)
|
||||
}
|
||||
func pluginGetBlockTracer(hash common.Hash, statedb *state.StateDB) *metaTracer {
|
||||
func pluginGetBlockTracer(hash common.Hash, statedb *state.StateDB) (*metaTracer, bool) {
|
||||
if plugins.DefaultPluginLoader == nil {
|
||||
log.Warn("Attempting GetBlockTracer, but default PluginLoader has not been initialized")
|
||||
return &metaTracer{}
|
||||
return &metaTracer{}, false
|
||||
}
|
||||
return PluginGetBlockTracer(plugins.DefaultPluginLoader, hash, statedb)
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ func PluginCommitUpdate(pl *plugins.PluginLoader, num uint64) {
|
||||
if freezerUpdates == nil { freezerUpdates = make(map[uint64]map[string]interface{}) }
|
||||
min := ^uint64(0)
|
||||
for i := range freezerUpdates{
|
||||
if min < i { min = i }
|
||||
if min > i { min = i }
|
||||
}
|
||||
for i := min ; i < num; i++ {
|
||||
update, ok := freezerUpdates[i]
|
||||
|
@ -71,9 +71,11 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
|
||||
misc.ApplyDAOHardFork(statedb)
|
||||
}
|
||||
blockContext := NewEVMBlockContext(header, p.bc, nil)
|
||||
blockTracer := pluginGetBlockTracer(header.Hash(), statedb)
|
||||
cfg.Tracer = blockTracer
|
||||
cfg.Debug = true
|
||||
blockTracer, ok := pluginGetBlockTracer(header.Hash(), statedb)
|
||||
if ok {
|
||||
cfg.Tracer = blockTracer
|
||||
cfg.Debug = true
|
||||
}
|
||||
vmenv := vm.NewEVM(blockContext, vm.TxContext{}, statedb, p.config, cfg)
|
||||
// Iterate over and process the individual transactions
|
||||
pluginPreProcessBlock(block)
|
||||
|
Loading…
Reference in New Issue
Block a user