mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
tests: fix goroutineleak
This commit is contained in:
parent
55a46c3b10
commit
bab7fb4ee1
1 changed files with 27 additions and 11 deletions
|
|
@ -240,6 +240,9 @@ func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapsh
|
||||||
vmconfig.ExtraEips = eips
|
vmconfig.ExtraEips = eips
|
||||||
|
|
||||||
block := t.genesis(config).ToBlock()
|
block := t.genesis(config).ToBlock()
|
||||||
|
// MakePreState invokes snapshot.New, which will start a goroutine to
|
||||||
|
// generate.go:generate(). This goroutine cannot exit until the abort-stats
|
||||||
|
// can be delivered, either via a call to Journal or e.g Disable.
|
||||||
triedb, snaps, statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre, snapshotter, scheme)
|
triedb, snaps, statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre, snapshotter, scheme)
|
||||||
|
|
||||||
var baseFee *big.Int
|
var baseFee *big.Int
|
||||||
|
|
@ -255,20 +258,44 @@ func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapsh
|
||||||
msg, err := t.json.Tx.toMessage(post, baseFee)
|
msg, err := t.json.Tx.toMessage(post, baseFee)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
triedb.Close()
|
triedb.Close()
|
||||||
|
if snaps != nil {
|
||||||
|
snaps.Disable()
|
||||||
|
}
|
||||||
return nil, nil, nil, common.Hash{}, err
|
return nil, nil, nil, common.Hash{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{ // Blob transactions may be present after the Cancun fork.
|
||||||
|
// In production,
|
||||||
|
// - the header is verified against the max in eip4844.go:VerifyEIP4844Header
|
||||||
|
// - the block body is verified against the header in block_validator.go:ValidateBody
|
||||||
|
// Here, we just do this shortcut smaller fix, since state tests do not
|
||||||
|
// utilize those codepaths
|
||||||
|
if len(msg.BlobHashes)*params.BlobTxBlobGasPerBlob > params.MaxBlobGasPerBlock {
|
||||||
|
triedb.Close()
|
||||||
|
if snaps != nil {
|
||||||
|
snaps.Disable()
|
||||||
|
}
|
||||||
|
return nil, nil, nil, common.Hash{}, errors.New("blob gas exceeds maximum")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Try to recover tx with current signer
|
// Try to recover tx with current signer
|
||||||
if len(post.TxBytes) != 0 {
|
if len(post.TxBytes) != 0 {
|
||||||
var ttx types.Transaction
|
var ttx types.Transaction
|
||||||
err := ttx.UnmarshalBinary(post.TxBytes)
|
err := ttx.UnmarshalBinary(post.TxBytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
triedb.Close()
|
triedb.Close()
|
||||||
|
if snaps != nil {
|
||||||
|
snaps.Disable()
|
||||||
|
}
|
||||||
return nil, nil, nil, common.Hash{}, err
|
return nil, nil, nil, common.Hash{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := types.Sender(types.LatestSigner(config), &ttx); err != nil {
|
if _, err := types.Sender(types.LatestSigner(config), &ttx); err != nil {
|
||||||
triedb.Close()
|
triedb.Close()
|
||||||
|
if snaps != nil {
|
||||||
|
snaps.Disable()
|
||||||
|
}
|
||||||
return nil, nil, nil, common.Hash{}, err
|
return nil, nil, nil, common.Hash{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -292,17 +319,6 @@ func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapsh
|
||||||
}
|
}
|
||||||
evm := vm.NewEVM(context, txContext, statedb, config, vmconfig)
|
evm := vm.NewEVM(context, txContext, statedb, config, vmconfig)
|
||||||
|
|
||||||
{ // Blob transactions may be present after the Cancun fork.
|
|
||||||
// In production,
|
|
||||||
// - the header is verified against the max in eip4844.go:VerifyEIP4844Header
|
|
||||||
// - the block body is verified against the header in block_validator.go:ValidateBody
|
|
||||||
// Here, we just do this shortcut smaller fix, since state tests do not
|
|
||||||
// utilize those codepaths
|
|
||||||
if len(msg.BlobHashes)*params.BlobTxBlobGasPerBlob > params.MaxBlobGasPerBlock {
|
|
||||||
return nil, nil, nil, common.Hash{}, errors.New("blob gas exceeds maximum")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute the message.
|
// Execute the message.
|
||||||
snapshot := statedb.Snapshot()
|
snapshot := statedb.Snapshot()
|
||||||
gaspool := new(core.GasPool)
|
gaspool := new(core.GasPool)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue