fix goroutine leaks in DHT commands
License: MIT Signed-off-by: Steven Allen <steven@stebalien.com>
Steven Allen committed
Nov 21, 2017 at 15:39 UTC
016b005333485756120b4dcff10c24cdd7bc4b04
1 file changed
+29
-6
core/commands/dht.go
+29
-6
@@ -93,7 +93,11 @@ var queryDhtCmd = &cmds.Command{
93
go func() {
94
defer close(outChan)
95
for e := range events {
96
- outChan <- e
96
+ select {
97
+ case outChan <- e:
98
+ case <-req.Context().Done():
99
+ return
100
+ }
101
}
102
}()
103
},
@@ -181,7 +185,11 @@ var findProvidersDhtCmd = &cmds.Command{
185
go func() {
186
defer close(outChan)
187
for e := range events {
184
- outChan <- e
188
+ select {
189
+ case outChan <- e:
190
+ case <-req.Context().Done():
191
+ return
192
+ }
193
}
194
}()
195
@@ -301,7 +309,11 @@ var provideRefDhtCmd = &cmds.Command{
309
go func() {
310
defer close(outChan)
311
for e := range events {
304
- outChan <- e
312
+ select {
313
+ case outChan <- e:
314
+ case <-req.Context().Done():
315
+ return
316
+ }
317
}
318
}()
319
@@ -427,7 +439,11 @@ var findPeerDhtCmd = &cmds.Command{
439
go func() {
440
defer close(outChan)
441
for v := range events {
430
- outChan <- v
442
+ select {
443
+ case outChan <- v:
444
+ case <-req.Context().Done():
445
+ }
446
+
447
}
448
}()
449
@@ -529,7 +545,10 @@ Different key types can specify other 'best' rules.
545
go func() {
546
defer close(outChan)
547
for e := range events {
532
- outChan <- e
548
+ select {
549
+ case outChan <- e:
550
+ case <-req.Context().Done():
551
+ }
552
}
553
}()
554
@@ -643,7 +662,11 @@ NOTE: A value may not exceed 2048 bytes.
662
go func() {
663
defer close(outChan)
664
for e := range events {
646
- outChan <- e
665
+ select {
666
+ case outChan <- e:
667
+ case <-req.Context().Done():
668
+ return
669
+ }
670
}
671
}()
672