diff options
author | Guillaume Ballet <gballet@gmail.com> | 2018-02-28 21:31:19 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-28 21:31:19 +0800 |
commit | 52bb0a1ec7f7b6c64a21291c1ca784763e09608d (patch) | |
tree | db4094ae37fb044ccfa44f89de82ce47b509c42e | |
parent | 1843615456b531fdf9fce836013579bd52c92d86 (diff) | |
parent | 62c239f608ec2ec3721c33d5755ca2287c71f085 (diff) | |
download | go-tangerine-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar go-tangerine-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar.gz go-tangerine-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar.bz2 go-tangerine-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar.lz go-tangerine-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar.xz go-tangerine-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar.zst go-tangerine-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.zip |
Merge pull request #16214 from b00ris/whisperv6_datarace
whisper: fixed dataraces in peer unit tests
-rw-r--r-- | whisper/whisperv6/peer_test.go | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/whisper/whisperv6/peer_test.go b/whisper/whisperv6/peer_test.go index 9ce5eed8b..6d7754d79 100644 --- a/whisper/whisperv6/peer_test.go +++ b/whisper/whisperv6/peer_test.go @@ -23,6 +23,7 @@ import ( mrand "math/rand" "net" "sync" + "sync/atomic" "testing" "time" @@ -71,7 +72,7 @@ var keys = []string{ } type TestData struct { - started int + started int64 counter [NumNodes]int mutex sync.RWMutex } @@ -240,9 +241,7 @@ func startServer(t *testing.T, s *p2p.Server) { t.Fatalf("failed to start the fisrt server.") } - result.mutex.Lock() - defer result.mutex.Unlock() - result.started++ + atomic.AddInt64(&result.started, 1) } func stopServers() { @@ -472,7 +471,10 @@ func checkPowExchange(t *testing.T) { func checkBloomFilterExchangeOnce(t *testing.T, mustPass bool) bool { for i, node := range nodes { for peer := range node.shh.peers { - if !bytes.Equal(peer.bloomFilter, masterBloomFilter) { + peer.bloomMu.Lock() + equals := bytes.Equal(peer.bloomFilter, masterBloomFilter) + peer.bloomMu.Unlock() + if !equals { if mustPass { t.Fatalf("node %d: failed to exchange bloom filter requirement in round %d. \n%x expected \n%x got", i, round, masterBloomFilter, peer.bloomFilter) @@ -500,11 +502,13 @@ func checkBloomFilterExchange(t *testing.T) { func waitForServersToStart(t *testing.T) { const iterations = 200 + var started int64 for j := 0; j < iterations; j++ { time.Sleep(50 * time.Millisecond) - if result.started == NumNodes { + started = atomic.LoadInt64(&result.started) + if started == NumNodes { return } } - t.Fatalf("Failed to start all the servers, running: %d", result.started) + t.Fatalf("Failed to start all the servers, running: %d", started) } |