aboutsummaryrefslogtreecommitdiffstats
path: root/whisper
diff options
context:
space:
mode:
authorGuillaume Ballet <gballet@gmail.com>2018-02-28 21:31:19 +0800
committerGitHub <noreply@github.com>2018-02-28 21:31:19 +0800
commit52bb0a1ec7f7b6c64a21291c1ca784763e09608d (patch)
treedb4094ae37fb044ccfa44f89de82ce47b509c42e /whisper
parent1843615456b531fdf9fce836013579bd52c92d86 (diff)
parent62c239f608ec2ec3721c33d5755ca2287c71f085 (diff)
downloaddexon-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar
dexon-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar.gz
dexon-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar.bz2
dexon-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar.lz
dexon-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar.xz
dexon-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.tar.zst
dexon-52bb0a1ec7f7b6c64a21291c1ca784763e09608d.zip
Merge pull request #16214 from b00ris/whisperv6_datarace
whisper: fixed dataraces in peer unit tests
Diffstat (limited to 'whisper')
-rw-r--r--whisper/whisperv6/peer_test.go18
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)
}