Skip to content

Commit 6b34597

Browse files
committed
make race detector happy
1 parent 4951a5d commit 6b34597

File tree

2 files changed

+80
-28
lines changed

2 files changed

+80
-28
lines changed

itest/echo.go

+66-10
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ var (
2626
type Echo struct {
2727
Host host.Host
2828

29-
BeforeReserve, BeforeRead, BeforeWrite, BeforeDone func() error
30-
3129
mx sync.Mutex
3230
status EchoStatus
31+
32+
beforeReserve, beforeRead, beforeWrite, beforeDone func() error
3333
}
3434

3535
type EchoStatus struct {
@@ -53,15 +53,71 @@ func (e *Echo) Status() EchoStatus {
5353
return e.status
5454
}
5555

56+
func (e *Echo) BeforeReserve(f func() error) {
57+
e.mx.Lock()
58+
defer e.mx.Unlock()
59+
60+
e.beforeReserve = f
61+
}
62+
63+
func (e *Echo) BeforeRead(f func() error) {
64+
e.mx.Lock()
65+
defer e.mx.Unlock()
66+
67+
e.beforeRead = f
68+
}
69+
70+
func (e *Echo) BeforeWrite(f func() error) {
71+
e.mx.Lock()
72+
defer e.mx.Unlock()
73+
74+
e.beforeWrite = f
75+
}
76+
77+
func (e *Echo) BeforeDone(f func() error) {
78+
e.mx.Lock()
79+
defer e.mx.Unlock()
80+
81+
e.beforeDone = f
82+
}
83+
84+
func (e *Echo) getBeforeReserve() func() error {
85+
e.mx.Lock()
86+
defer e.mx.Unlock()
87+
88+
return e.beforeReserve
89+
}
90+
91+
func (e *Echo) getBeforeRead() func() error {
92+
e.mx.Lock()
93+
defer e.mx.Unlock()
94+
95+
return e.beforeRead
96+
}
97+
98+
func (e *Echo) getBeforeWrite() func() error {
99+
e.mx.Lock()
100+
defer e.mx.Unlock()
101+
102+
return e.beforeWrite
103+
}
104+
105+
func (e *Echo) getBeforeDone() func() error {
106+
e.mx.Lock()
107+
defer e.mx.Unlock()
108+
109+
return e.beforeDone
110+
}
111+
56112
func (e *Echo) handleStream(s network.Stream) {
57113
defer s.Close()
58114

59115
e.mx.Lock()
60116
e.status.StreamsIn++
61117
e.mx.Unlock()
62118

63-
if e.BeforeReserve != nil {
64-
if err := e.BeforeReserve(); err != nil {
119+
if beforeReserve := e.getBeforeReserve(); beforeReserve != nil {
120+
if err := beforeReserve(); err != nil {
65121
echoLog.Debugf("error syncing before reserve: %s", err)
66122

67123
s.Reset()
@@ -91,8 +147,8 @@ func (e *Echo) handleStream(s network.Stream) {
91147
return
92148
}
93149

94-
if e.BeforeRead != nil {
95-
if err := e.BeforeRead(); err != nil {
150+
if beforeRead := e.getBeforeRead(); beforeRead != nil {
151+
if err := beforeRead(); err != nil {
96152
echoLog.Debugf("error syncing before read: %s", err)
97153

98154
s.Reset()
@@ -125,8 +181,8 @@ func (e *Echo) handleStream(s network.Stream) {
125181
e.status.EchosIn++
126182
e.mx.Unlock()
127183

128-
if e.BeforeWrite != nil {
129-
if err := e.BeforeWrite(); err != nil {
184+
if beforeWrite := e.getBeforeWrite(); beforeWrite != nil {
185+
if err := beforeWrite(); err != nil {
130186
echoLog.Debugf("error syncing before write: %s", err)
131187

132188
s.Reset()
@@ -153,8 +209,8 @@ func (e *Echo) handleStream(s network.Stream) {
153209

154210
s.CloseWrite()
155211

156-
if e.BeforeDone != nil {
157-
if err := e.BeforeDone(); err != nil {
212+
if beforeDone := e.getBeforeDone(); beforeDone != nil {
213+
if err := beforeDone(); err != nil {
158214
echoLog.Debugf("error syncing before done: %s", err)
159215

160216
s.Reset()

itest/rcmgr_test.go

+14-18
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ func TestResourceManagerServiceInbound(t *testing.T) {
109109
defer closeEchos(echos)
110110
defer closeRcmgrs(echos)
111111

112-
ready := new(chan struct{})
113-
echos[0].BeforeDone = waitForChannel(ready, time.Minute)
112+
ready := make(chan struct{})
113+
echos[0].BeforeDone(waitForChannel(ready, time.Minute))
114114

115115
for i := 1; i < 5; i++ {
116116
err := echos[i].Host.Connect(context.Background(), peer.AddrInfo{ID: echos[0].Host.ID()})
@@ -120,8 +120,6 @@ func TestResourceManagerServiceInbound(t *testing.T) {
120120
time.Sleep(10 * time.Millisecond)
121121
}
122122

123-
*ready = make(chan struct{})
124-
125123
var once sync.Once
126124
var wg sync.WaitGroup
127125
for i := 1; i < 5; i++ {
@@ -133,7 +131,7 @@ func TestResourceManagerServiceInbound(t *testing.T) {
133131
if err != nil {
134132
t.Log(err)
135133
once.Do(func() {
136-
close(*ready)
134+
close(ready)
137135
})
138136
}
139137
}(i)
@@ -160,8 +158,9 @@ func TestResourceManagerServicePeerInbound(t *testing.T) {
160158
defer closeRcmgrs(echos)
161159

162160
count := new(int32)
163-
ready := new(chan struct{})
164-
echos[0].BeforeDone = waitForBarrier(count, ready, time.Minute)
161+
ready := make(chan struct{})
162+
*count = 4
163+
echos[0].BeforeDone(waitForBarrier(count, ready, time.Minute))
165164

166165
for i := 1; i < 5; i++ {
167166
err := echos[i].Host.Connect(context.Background(), peer.AddrInfo{ID: echos[0].Host.ID()})
@@ -171,9 +170,6 @@ func TestResourceManagerServicePeerInbound(t *testing.T) {
171170
time.Sleep(10 * time.Millisecond)
172171
}
173172

174-
*count = 4
175-
*ready = make(chan struct{})
176-
177173
var wg sync.WaitGroup
178174
for i := 1; i < 5; i++ {
179175
wg.Add(1)
@@ -195,8 +191,8 @@ func TestResourceManagerServicePeerInbound(t *testing.T) {
195191
ResourceServiceErrors: 0,
196192
})
197193

198-
*ready = make(chan struct{})
199-
echos[0].BeforeDone = waitForChannel(ready, time.Minute)
194+
ready = make(chan struct{})
195+
echos[0].BeforeDone(waitForChannel(ready, time.Minute))
200196

201197
var once sync.Once
202198
for i := 0; i < 3; i++ {
@@ -208,7 +204,7 @@ func TestResourceManagerServicePeerInbound(t *testing.T) {
208204
if err != nil {
209205
t.Log(err)
210206
once.Do(func() {
211-
close(*ready)
207+
close(ready)
212208
})
213209
}
214210
}()
@@ -223,25 +219,25 @@ func TestResourceManagerServicePeerInbound(t *testing.T) {
223219
})
224220
}
225221

226-
func waitForBarrier(count *int32, ready *chan struct{}, timeout time.Duration) func() error {
222+
func waitForBarrier(count *int32, ready chan struct{}, timeout time.Duration) func() error {
227223
return func() error {
228224
if atomic.AddInt32(count, -1) == 0 {
229-
close(*ready)
225+
close(ready)
230226
}
231227

232228
select {
233-
case <-*ready:
229+
case <-ready:
234230
return nil
235231
case <-time.After(timeout):
236232
return fmt.Errorf("timeout")
237233
}
238234
}
239235
}
240236

241-
func waitForChannel(ready *chan struct{}, timeout time.Duration) func() error {
237+
func waitForChannel(ready chan struct{}, timeout time.Duration) func() error {
242238
return func() error {
243239
select {
244-
case <-*ready:
240+
case <-ready:
245241
return nil
246242
case <-time.After(timeout):
247243
return fmt.Errorf("timeout")

0 commit comments

Comments
 (0)