提交 a3a685d8 作者: Brian Tiger Chow

Merge pull request #448 from jbenet/fix/test-memory-leak

fix: memory leak in epic tests
...@@ -104,6 +104,7 @@ func AddCatBytes(conf Config) error { ...@@ -104,6 +104,7 @@ func AddCatBytes(conf Config) error {
tn.VirtualNetwork(delay.Fixed(conf.NetworkLatency)), // TODO rename VirtualNetwork tn.VirtualNetwork(delay.Fixed(conf.NetworkLatency)), // TODO rename VirtualNetwork
mockrouting.NewServerWithDelay(delay.Fixed(conf.RoutingLatency)), mockrouting.NewServerWithDelay(delay.Fixed(conf.RoutingLatency)),
) )
defer sessionGenerator.Close()
adder := sessionGenerator.Next() adder := sessionGenerator.Next()
catter := sessionGenerator.Next() catter := sessionGenerator.Next()
......
...@@ -17,24 +17,34 @@ import ( ...@@ -17,24 +17,34 @@ import (
func NewSessionGenerator( func NewSessionGenerator(
net tn.Network, rs mockrouting.Server) SessionGenerator { net tn.Network, rs mockrouting.Server) SessionGenerator {
ctx, cancel := context.WithCancel(context.TODO())
return SessionGenerator{ return SessionGenerator{
net: net, ps: peer.NewPeerstore(),
rs: rs, net: net,
ps: peer.NewPeerstore(), rs: rs,
seq: 0, seq: 0,
ctx: ctx, // TODO take ctx as param to Next, Instances
cancel: cancel,
} }
} }
type SessionGenerator struct { type SessionGenerator struct {
seq int seq int
net tn.Network net tn.Network
rs mockrouting.Server rs mockrouting.Server
ps peer.Peerstore ps peer.Peerstore
ctx context.Context
cancel context.CancelFunc
}
func (g *SessionGenerator) Close() error {
g.cancel()
return nil // for Closer interface
} }
func (g *SessionGenerator) Next() Instance { func (g *SessionGenerator) Next() Instance {
g.seq++ g.seq++
return session(g.net, g.rs, g.ps, []byte(string(g.seq))) return session(g.ctx, g.net, g.rs, g.ps, []byte(string(g.seq)))
} }
func (g *SessionGenerator) Instances(n int) []Instance { func (g *SessionGenerator) Instances(n int) []Instance {
...@@ -67,7 +77,7 @@ func (i *Instance) SetBlockstoreLatency(t time.Duration) time.Duration { ...@@ -67,7 +77,7 @@ func (i *Instance) SetBlockstoreLatency(t time.Duration) time.Duration {
// NB: It's easy make mistakes by providing the same peer ID to two different // NB: It's easy make mistakes by providing the same peer ID to two different
// sessions. To safeguard, use the SessionGenerator to generate sessions. It's // sessions. To safeguard, use the SessionGenerator to generate sessions. It's
// just a much better idea. // just a much better idea.
func session(net tn.Network, rs mockrouting.Server, ps peer.Peerstore, id peer.ID) Instance { func session(ctx context.Context, net tn.Network, rs mockrouting.Server, ps peer.Peerstore, id peer.ID) Instance {
p := ps.WithID(id) p := ps.WithID(id)
adapter := net.Adapter(p) adapter := net.Adapter(p)
...@@ -82,7 +92,6 @@ func session(net tn.Network, rs mockrouting.Server, ps peer.Peerstore, id peer.I ...@@ -82,7 +92,6 @@ func session(net tn.Network, rs mockrouting.Server, ps peer.Peerstore, id peer.I
} }
const alwaysSendToPeer = true const alwaysSendToPeer = true
ctx := context.TODO()
bs := New(ctx, p, adapter, htc, bstore, alwaysSendToPeer) bs := New(ctx, p, adapter, htc, bstore, alwaysSendToPeer)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论