From aa70bbaf15067d7c02149581ca7236f52cd2b22d Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Sun, 19 Oct 2014 06:21:06 -0700 Subject: [PATCH] evil deadlock that wasn't. important to always reread your code. --- net/swarm/conn.go | 9 ++++----- net/swarm/simul_test.go | 5 ++++- net/swarm/swarm_test.go | 2 ++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/net/swarm/conn.go b/net/swarm/conn.go index 5abd77c44..891a191a6 100644 --- a/net/swarm/conn.go +++ b/net/swarm/conn.go @@ -102,8 +102,8 @@ func (s *Swarm) connSetup(c conn.Conn) (conn.Conn, error) { // add to conns s.connsLock.Lock() - mc, ok := s.conns[c.RemotePeer().Key()] - if !ok { + mc, found := s.conns[c.RemotePeer().Key()] + if !found { // multiconn doesn't exist, make a new one. conns := []conn.Conn{c} mc, err := conn.NewMultiConn(s.Context(), s.local, c.RemotePeer(), conns) @@ -116,6 +116,8 @@ func (s *Swarm) connSetup(c conn.Conn) (conn.Conn, error) { s.conns[c.RemotePeer().Key()] = mc s.connsLock.Unlock() + // kick off reader goroutine + go s.fanInSingle(mc) log.Debug("added new multiconn: %s", mc) } else { s.connsLock.Unlock() // unlock before adding new conn @@ -125,9 +127,6 @@ func (s *Swarm) connSetup(c conn.Conn) (conn.Conn, error) { } log.Debug("multiconn added new conn %s", c) - - // kick off reader goroutine - go s.fanInSingle(c) return c, nil } diff --git a/net/swarm/simul_test.go b/net/swarm/simul_test.go index 4110ce273..2cffd0d2c 100644 --- a/net/swarm/simul_test.go +++ b/net/swarm/simul_test.go @@ -61,8 +61,11 @@ func TestSimultOpenMany(t *testing.T) { } func TestSimultOpenFewStress(t *testing.T) { + // t.Skip("skipping for another test") - for i := 0; i < 100; i++ { + num := 10 + // num := 100 + for i := 0; i < num; i++ { addrs := []string{ fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", 1900+i), fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", 2900+i), diff --git a/net/swarm/swarm_test.go b/net/swarm/swarm_test.go index e778a4f57..0e389ac3d 100644 --- a/net/swarm/swarm_test.go +++ b/net/swarm/swarm_test.go @@ -141,6 +141,7 @@ func SubtestSwarm(t *testing.T, addrs []string, MsgNum int) { got := map[u.Key]int{} for k := 0; k < (MsgNum * len(*peers)); k++ { + log.Debug("%s waiting for pong (%d)", s1.local, k) msg := <-s1.Incoming if string(msg.Data()) != "pong" { t.Error("unexpected conn output", msg.Data) @@ -180,6 +181,7 @@ func TestSwarm(t *testing.T) { "/ip4/127.0.0.1/tcp/1238", } + // msgs := 1000 msgs := 100 SubtestSwarm(t, addrs, msgs) }