From b8c48b2025a1eba3f0b0c22bc69a486bd0a0551a Mon Sep 17 00:00:00 2001 From: Wolfgang Welz <welzwo@gmail.com> Date: Fri, 24 Apr 2020 09:44:21 +0200 Subject: [PATCH] Fix: Deadlock in TestDropNeighbor (#362) --- packages/gossip/manager_test.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/gossip/manager_test.go b/packages/gossip/manager_test.go index 49886506..53fe0889 100644 --- a/packages/gossip/manager_test.go +++ b/packages/gossip/manager_test.go @@ -387,7 +387,7 @@ func TestDropNeighbor(t *testing.T) { go func() { assert.NoError(t, mgrA.AddInbound(peerB)) }() go func() { assert.NoError(t, mgrB.AddOutbound(peerA)) }() - wg.Wait() // wait until the events were triggered + wg.Wait() // wait until the events were triggered and the peers are connected } disc := func() { var wg sync.WaitGroup @@ -396,9 +396,17 @@ func TestDropNeighbor(t *testing.T) { Events.NeighborRemoved.Attach(closure) defer Events.NeighborRemoved.Detach(closure) - go func() { _ = mgrA.DropNeighbor(peerB.ID()) }() - go func() { _ = mgrB.DropNeighbor(peerA.ID()) }() - wg.Wait() // wait until the events were triggered + // assure that no DropNeighbor calls are leaking + wg.Add(2) + go func() { + defer wg.Done() + _ = mgrA.DropNeighbor(peerB.ID()) + }() + go func() { + defer wg.Done() + _ = mgrB.DropNeighbor(peerA.ID()) + }() + wg.Wait() // wait until the events were triggered and the go routines are done } // drop and connect many many times -- GitLab