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