@cryptotaxi247 / kubo / commits / 016b00533

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