client.go | 13 +++++++------ diff --git a/client.go b/client.go index 90a74d9570a7183fa0fcc3f9dba3a9931261dfce..5e635f27c6a8ecb9267444a8c601bdb436c1e6f6 100644 --- a/client.go +++ b/client.go @@ -603,13 +603,12 @@ localPublicAddr: cl.publicAddr(remoteAddr.IP), network: nc.RemoteAddr().Network(), connString: regularNetConnPeerConnConnString(nc), }) - defer func() { - cl.lock() - defer cl.unlock() - c.close() - }() c.Discovery = PeerSourceIncoming cl.runReceivedConn(c) + + cl.lock() + c.close() + cl.unlock() } // Returns a handle to the given torrent, if it's present in the client. @@ -1014,13 +1013,15 @@ ih, err := cl.connBtHandshake(c, nil, cl.config.Extensions) if err != nil { return nil, fmt.Errorf("during bt handshake: %w", err) } + cl.lock() t = cl.torrentsByShortHash[ih] - if t.infoHashV2.Ok && *t.infoHashV2.Value.ToShort() == ih { + if t != nil && t.infoHashV2.Ok && *t.infoHashV2.Value.ToShort() == ih { torrent.Add("v2 handshakes received", 1) c.v2 = true } cl.unlock() + return }