aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbojie <bojie@dexon.org>2019-03-18 11:32:12 +0800
committerGitHub <noreply@github.com>2019-03-18 11:32:12 +0800
commit89dddf787c9360f0fed76738fb515be30c7d73bc (patch)
treefaafbe1b46e27e20ea5f9ed7678bb0418ebf7cd3
parent98d71cb5ec7e3d343488607db8047b4cd80be9cf (diff)
downloaddexon-consensus-89dddf787c9360f0fed76738fb515be30c7d73bc.tar
dexon-consensus-89dddf787c9360f0fed76738fb515be30c7d73bc.tar.gz
dexon-consensus-89dddf787c9360f0fed76738fb515be30c7d73bc.tar.bz2
dexon-consensus-89dddf787c9360f0fed76738fb515be30c7d73bc.tar.lz
dexon-consensus-89dddf787c9360f0fed76738fb515be30c7d73bc.tar.xz
dexon-consensus-89dddf787c9360f0fed76738fb515be30c7d73bc.tar.zst
dexon-consensus-89dddf787c9360f0fed76738fb515be30c7d73bc.zip
test: fix data race (#497)
-rw-r--r--core/test/tcp-transport.go26
1 files changed, 17 insertions, 9 deletions
diff --git a/core/test/tcp-transport.go b/core/test/tcp-transport.go
index 566549f..19d9bfa 100644
--- a/core/test/tcp-transport.go
+++ b/core/test/tcp-transport.go
@@ -534,6 +534,13 @@ func (t *TCPTransport) listenerRoutine(listener *net.TCPListener) {
// we only utilize the write part for simplicity.
func (t *TCPTransport) buildConnectionsToPeers() (err error) {
var wg sync.WaitGroup
+ var errs []error
+ var errsLock sync.Mutex
+ addErr := func(err error) {
+ errsLock.Lock()
+ defer errsLock.Unlock()
+ errs = append(errs, err)
+ }
for nID, rec := range t.peers {
if nID == t.nID {
continue
@@ -541,30 +548,31 @@ func (t *TCPTransport) buildConnectionsToPeers() (err error) {
wg.Add(1)
go func(nID types.NodeID, addr string) {
defer wg.Done()
-
conn, localErr := net.Dial("tcp", addr)
if localErr != nil {
- // Propagate this error to outside, at least one error
- // could be returned to caller.
- err = localErr
+ addErr(localErr)
return
}
- serverID, e := t.clientHandshake(conn)
- if e != nil {
- err = e
+ serverID, localErr := t.clientHandshake(conn)
+ if localErr != nil {
+ addErr(localErr)
return
}
if nID != serverID {
- err = ErrConnectToUnexpectedPeer
+ addErr(ErrConnectToUnexpectedPeer)
return
}
t.peersLock.Lock()
defer t.peersLock.Unlock()
-
t.peers[nID].sendChannel = t.connWriter(conn)
}(nID, rec.conn)
}
wg.Wait()
+ if len(errs) > 0 {
+ // Propagate this error to outside, at least one error
+ // could be returned to caller.
+ err = errs[0]
+ }
return
}