From 5f21b557e57b00e8f867fd4f8867ada9b2553d3a Mon Sep 17 00:00:00 2001 From: Zeming YU Date: Wed, 17 Jul 2019 16:43:40 -0700 Subject: [PATCH] integration: fix a data race about `i` and `tt` in TestV3WatchFromCurrentRevision don't references to loop variables from within go anonymous function Fixes etcd-io#10899 --- integration/v3_watch_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/integration/v3_watch_test.go b/integration/v3_watch_test.go index 2de2db4c411..85687536b07 100644 --- a/integration/v3_watch_test.go +++ b/integration/v3_watch_test.go @@ -245,6 +245,7 @@ func TestV3WatchFromCurrentRevision(t *testing.T) { } // asynchronously create keys + ch := make(chan struct{}, 1) go func() { for _, k := range tt.putKeys { kvc := toGRPC(clus.RandClient()).KV @@ -253,6 +254,7 @@ func TestV3WatchFromCurrentRevision(t *testing.T) { t.Errorf("#%d: couldn't put key (%v)", i, err) } } + ch <- struct{}{} }() // check stream results @@ -286,6 +288,9 @@ func TestV3WatchFromCurrentRevision(t *testing.T) { t.Errorf("unexpected pb.WatchResponse is received %+v", nr) } + // wait for the client to finish sending the keys before terminating the cluster + <-ch + // can't defer because tcp ports will be in use clus.Terminate(t) }