diff --git a/node/node.go b/node/node.go index a69966308c..6bb670390e 100644 --- a/node/node.go +++ b/node/node.go @@ -821,13 +821,16 @@ type closeTrackingDB struct { } func (db *closeTrackingDB) Close() error { - db.n.lock.Lock() - delete(db.n.databases, db) - db.n.lock.Unlock() + err := db.Database.Close() + if err == nil { + db.n.lock.Lock() + delete(db.n.databases, db) + db.n.lock.Unlock() - db.n.closeDataDir() + db.n.closeDataDir() + } - return db.Database.Close() + return err } // wrapDatabase ensures the database will be auto-closed when Node is closed. diff --git a/p2p/nat/nat_test.go b/p2p/nat/nat_test.go index 2490fd33ee..150b9deb31 100644 --- a/p2p/nat/nat_test.go +++ b/p2p/nat/nat_test.go @@ -73,6 +73,7 @@ func TestParseStun(t *testing.T) { }{ {"stun", &stun{serverList: strings.Split(stunDefaultServers, "\n")}}, {"stun:1.2.3.4:1234", &stun{serverList: []string{"1.2.3.4:1234"}}}, + {"stun:[2001:db8::1]:3478", &stun{serverList: []string{"[2001:db8::1]:3478"}}}, } for _, tc := range testcases { diff --git a/p2p/nat/stun.go b/p2p/nat/stun.go index 5fdf344696..725ae9d083 100644 --- a/p2p/nat/stun.go +++ b/p2p/nat/stun.go @@ -45,7 +45,7 @@ func newSTUN(serverAddr string) (Interface, error) { if serverAddr == "" { s.serverList = strings.Split(stunDefaultServers, "\n") } else { - _, err := net.ResolveUDPAddr("udp4", serverAddr) + _, err := net.ResolveUDPAddr("udp", serverAddr) if err != nil { return nil, err } @@ -111,7 +111,7 @@ func (s *stun) externalIP(server string) (net.IP, error) { } log.Trace("Attempting STUN binding request", "server", server) - conn, err := stunV3.Dial("udp4", server) + conn, err := stunV3.Dial("udp", server) if err != nil { return nil, err }