Skip to content

Commit fd104b9

Browse files
authored
Fix two data races in test code. (#904)
1 parent 5fe9dc5 commit fd104b9

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

internal/testutil/monitor/monitor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ func NewTestPoolMonitor() *TestPoolMonitor {
4141
// applied to the returned events set and are applied using AND logic (i.e. all filters must return
4242
// true to include the event in the result).
4343
func (tpm *TestPoolMonitor) Events(filters ...func(*event.PoolEvent) bool) []*event.PoolEvent {
44-
filtered := make([]*event.PoolEvent, 0, len(tpm.events))
4544
tpm.mu.RLock()
4645
defer tpm.mu.RUnlock()
4746

47+
filtered := make([]*event.PoolEvent, 0, len(tpm.events))
4848
for _, evt := range tpm.events {
4949
keep := true
5050
for _, filter := range filters {

x/mongo/driver/topology/rtt_monitor_test.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"io"
1313
"math"
1414
"net"
15+
"sync/atomic"
1516
"testing"
1617
"time"
1718

@@ -32,30 +33,33 @@ var _ net.Conn = &mockSlowConn{}
3233
type mockSlowConn struct {
3334
reader *bytes.Reader
3435
delay time.Duration
35-
closed bool
36+
closed atomic.Value
3637
}
3738

3839
// newMockSlowConn returns a net.Conn that reads from the specified response after blocking for a
3940
// delay duration. Calls to Write() reset the read buffer, so subsequent Read() calls read from the
4041
// beginning of the provided response.
4142
func newMockSlowConn(response []byte, delay time.Duration) *mockSlowConn {
43+
var closed atomic.Value
44+
closed.Store(false)
45+
4246
return &mockSlowConn{
4347
reader: bytes.NewReader(response),
4448
delay: delay,
45-
closed: false,
49+
closed: closed,
4650
}
4751
}
4852

4953
func (msc *mockSlowConn) Read(b []byte) (int, error) {
5054
time.Sleep(msc.delay)
51-
if msc.closed {
55+
if msc.closed.Load().(bool) {
5256
return 0, io.ErrUnexpectedEOF
5357
}
5458
return msc.reader.Read(b)
5559
}
5660

5761
func (msc *mockSlowConn) Write(b []byte) (int, error) {
58-
if msc.closed {
62+
if msc.closed.Load().(bool) {
5963
return 0, io.ErrUnexpectedEOF
6064
}
6165
_, err := msc.reader.Seek(0, io.SeekStart)
@@ -65,7 +69,7 @@ func (msc *mockSlowConn) Write(b []byte) (int, error) {
6569
// Close closes the mock connection. All subsequent calls to Read or Write return error
6670
// io.ErrUnexpectedEOF. It is not safe to call Close concurrently with Read or Write.
6771
func (msc *mockSlowConn) Close() error {
68-
msc.closed = true
72+
msc.closed.Store(true)
6973
return nil
7074
}
7175

0 commit comments

Comments
 (0)