ethclient/simulated: clean up Node resources when simulated backend is closed (#29316)
This commit is contained in:
parent
14cc967d19
commit
5cea7a6230
@ -101,8 +101,8 @@ type Ethereum struct {
|
|||||||
shutdownTracker *shutdowncheck.ShutdownTracker // Tracks if and when the node has shutdown ungracefully
|
shutdownTracker *shutdowncheck.ShutdownTracker // Tracks if and when the node has shutdown ungracefully
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new Ethereum object (including the
|
// New creates a new Ethereum object (including the initialisation of the common Ethereum object),
|
||||||
// initialisation of the common Ethereum object)
|
// whose lifecycle will be managed by the provided node.
|
||||||
func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) {
|
func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) {
|
||||||
// Ensure configuration values are compatible and sane
|
// Ensure configuration values are compatible and sane
|
||||||
if config.SyncMode == downloader.LightSync {
|
if config.SyncMode == downloader.LightSync {
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
package simulated
|
package simulated
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum"
|
"github.com/ethereum/go-ethereum"
|
||||||
@ -62,7 +63,7 @@ type simClient struct {
|
|||||||
// Backend is a simulated blockchain. You can use it to test your contracts or
|
// Backend is a simulated blockchain. You can use it to test your contracts or
|
||||||
// other code that interacts with the Ethereum chain.
|
// other code that interacts with the Ethereum chain.
|
||||||
type Backend struct {
|
type Backend struct {
|
||||||
eth *eth.Ethereum
|
node *node.Node
|
||||||
beacon *catalyst.SimulatedBeacon
|
beacon *catalyst.SimulatedBeacon
|
||||||
client simClient
|
client simClient
|
||||||
}
|
}
|
||||||
@ -129,7 +130,7 @@ func newWithNode(stack *node.Node, conf *eth.Config, blockPeriod uint64) (*Backe
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &Backend{
|
return &Backend{
|
||||||
eth: backend,
|
node: stack,
|
||||||
beacon: beacon,
|
beacon: beacon,
|
||||||
client: simClient{ethclient.NewClient(stack.Attach())},
|
client: simClient{ethclient.NewClient(stack.Attach())},
|
||||||
}, nil
|
}, nil
|
||||||
@ -142,12 +143,16 @@ func (n *Backend) Close() error {
|
|||||||
n.client.Close()
|
n.client.Close()
|
||||||
n.client = simClient{}
|
n.client = simClient{}
|
||||||
}
|
}
|
||||||
|
var err error
|
||||||
if n.beacon != nil {
|
if n.beacon != nil {
|
||||||
err := n.beacon.Stop()
|
err = n.beacon.Stop()
|
||||||
n.beacon = nil
|
n.beacon = nil
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
return nil
|
if n.node != nil {
|
||||||
|
err = errors.Join(err, n.node.Close())
|
||||||
|
n.node = nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Commit seals a block and moves the chain forward to a new empty block.
|
// Commit seals a block and moves the chain forward to a new empty block.
|
||||||
|
Loading…
Reference in New Issue
Block a user