mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-02-26 07:37:20 +00:00
p2p: cleanup v4 if v5 failed (#33005)
Clean the previous resource (v4) if the latter (v5) failed.
This commit is contained in:
parent
ae37b4928c
commit
5dd0fe2f53
2 changed files with 32 additions and 0 deletions
|
|
@ -490,6 +490,11 @@ func (srv *Server) setupDiscovery() error {
|
||||||
}
|
}
|
||||||
srv.discv5, err = discover.ListenV5(sconn, srv.localnode, cfg)
|
srv.discv5, err = discover.ListenV5(sconn, srv.localnode, cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
// Clean up v4 if v5 setup fails.
|
||||||
|
if srv.discv4 != nil {
|
||||||
|
srv.discv4.Close()
|
||||||
|
srv.discv4 = nil
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -579,6 +579,33 @@ func TestServerInboundThrottle(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestServerDiscoveryV5FailureRollsBackV4(t *testing.T) {
|
||||||
|
badBootstrap := enode.NewV4(&newkey().PublicKey, net.ParseIP("127.0.0.1"), 30303, 0) // invalid V5 of a V4 node
|
||||||
|
srv := &Server{
|
||||||
|
Config: Config{
|
||||||
|
PrivateKey: newkey(),
|
||||||
|
ListenAddr: "",
|
||||||
|
DiscAddr: "127.0.0.1:0",
|
||||||
|
MaxPeers: 5,
|
||||||
|
DiscoveryV4: true,
|
||||||
|
DiscoveryV5: true,
|
||||||
|
BootstrapNodesV5: []*enode.Node{badBootstrap},
|
||||||
|
Logger: testlog.Logger(t, log.LvlTrace),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
err := srv.Start()
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("expected discovery v5 startup failure")
|
||||||
|
}
|
||||||
|
if !strings.Contains(err.Error(), "bad bootstrap node") {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if srv.DiscoveryV4() != nil {
|
||||||
|
t.Fatal("discovery v4 not cleaned after failure")
|
||||||
|
}
|
||||||
|
srv.Stop()
|
||||||
|
}
|
||||||
|
|
||||||
func listenFakeAddr(network, laddr string, remoteAddr net.Addr) (net.Listener, error) {
|
func listenFakeAddr(network, laddr string, remoteAddr net.Addr) (net.Listener, error) {
|
||||||
l, err := net.Listen(network, laddr)
|
l, err := net.Listen(network, laddr)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue