diff options
author | bojie <bojie@dexon.org> | 2019-03-18 11:32:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-18 11:32:12 +0800 |
commit | 89dddf787c9360f0fed76738fb515be30c7d73bc (patch) | |
tree | faafbe1b46e27e20ea5f9ed7678bb0418ebf7cd3 /core | |
parent | 98d71cb5ec7e3d343488607db8047b4cd80be9cf (diff) | |
download | dexon-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)
Diffstat (limited to 'core')
-rw-r--r-- | core/test/tcp-transport.go | 26 |
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 } |