@@ -176,9 +176,10 @@ func (f *funcGroup) Start(cancel context.CancelFunc, mainRequestHandlerIndex int
176
176
dbg .Printf ("auxN: %d\n " , auxN )
177
177
wg := sync.WaitGroup {}
178
178
f .manager .running = true
179
- ticker := f .manager .rateCapture ()
179
+ stopCapture := f .manager .rateCapture ()
180
180
time .AfterFunc (f .manager .captureTime , func () {
181
- ticker .Stop ()
181
+ stopCapture <- true
182
+ close (stopCapture )
182
183
f .manager .running = false
183
184
cancel ()
184
185
dbg .Println ("FuncGroup: Stop" )
@@ -220,15 +221,16 @@ func (f *funcGroup) Start(cancel context.CancelFunc, mainRequestHandlerIndex int
220
221
wg .Wait ()
221
222
}
222
223
223
- func (dm * DataManager ) rateCapture () * time. Ticker {
224
+ func (dm * DataManager ) rateCapture () chan bool {
224
225
ticker := time .NewTicker (dm .rateCaptureFrequency )
225
226
oldTotalDownload := dm .totalDownload
226
227
oldTotalUpload := dm .totalUpload
227
- go func () {
228
- loop:
228
+ stopCapture := make (chan bool )
229
+ go func (t * time.Ticker ) {
230
+ defer t .Stop ()
229
231
for {
230
232
select {
231
- case <- ticker .C :
233
+ case <- t .C :
232
234
newTotalDownload := dm .totalDownload
233
235
newTotalUpload := dm .totalUpload
234
236
deltaDownload := newTotalDownload - oldTotalDownload
@@ -241,14 +243,14 @@ func (dm *DataManager) rateCapture() *time.Ticker {
241
243
if deltaUpload != 0 {
242
244
dm .UploadRateSequence = append (dm .UploadRateSequence , deltaUpload )
243
245
}
244
- default :
245
- if ! dm . running {
246
- break loop
246
+ case stop := <- stopCapture :
247
+ if stop {
248
+ return
247
249
}
248
250
}
249
251
}
250
- }()
251
- return ticker
252
+ }(ticker )
253
+ return stopCapture
252
254
}
253
255
254
256
func (dm * DataManager ) NewChunk () Chunk {
0 commit comments