提交 e0f04176 作者: Juan Benet

Merge pull request #1796 from ipfs/mocknet-fix

mocknet: conn close idempotent with process.
...@@ -9,6 +9,7 @@ import ( ...@@ -9,6 +9,7 @@ import (
peer "github.com/ipfs/go-ipfs/p2p/peer" peer "github.com/ipfs/go-ipfs/p2p/peer"
ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
process "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/goprocess"
) )
// conn represents one side's perspective of a // conn represents one side's perspective of a
...@@ -28,11 +29,31 @@ type conn struct { ...@@ -28,11 +29,31 @@ type conn struct {
link *link link *link
rconn *conn // counterpart rconn *conn // counterpart
streams list.List streams list.List
proc process.Process
sync.RWMutex sync.RWMutex
} }
func newConn(ln, rn *peernet, l *link) *conn {
c := &conn{net: ln, link: l}
c.local = ln.peer
c.remote = rn.peer
c.localAddr = ln.ps.Addrs(ln.peer)[0]
c.remoteAddr = rn.ps.Addrs(rn.peer)[0]
c.localPrivKey = ln.ps.PrivKey(ln.peer)
c.remotePubKey = rn.ps.PubKey(rn.peer)
c.proc = process.WithTeardown(c.teardown)
return c
}
func (c *conn) Close() error { func (c *conn) Close() error {
return c.proc.Close()
}
func (c *conn) teardown() error {
for _, s := range c.allStreams() { for _, s := range c.allStreams() {
s.Close() s.Close()
} }
......
...@@ -33,22 +33,8 @@ func (l *link) newConnPair(dialer *peernet) (*conn, *conn) { ...@@ -33,22 +33,8 @@ func (l *link) newConnPair(dialer *peernet) (*conn, *conn) {
l.RLock() l.RLock()
defer l.RUnlock() defer l.RUnlock()
mkconn := func(ln, rn *peernet) *conn { c1 := newConn(l.nets[0], l.nets[1], l)
c := &conn{net: ln, link: l} c2 := newConn(l.nets[1], l.nets[0], l)
c.local = ln.peer
c.remote = rn.peer
c.localAddr = ln.ps.Addrs(ln.peer)[0]
c.remoteAddr = rn.ps.Addrs(rn.peer)[0]
c.localPrivKey = ln.ps.PrivKey(ln.peer)
c.remotePubKey = rn.ps.PubKey(rn.peer)
return c
}
c1 := mkconn(l.nets[0], l.nets[1])
c2 := mkconn(l.nets[1], l.nets[0])
c1.rconn = c2 c1.rconn = c2
c2.rconn = c1 c2.rconn = c1
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论