make sure muliplex goroutine quits eventually
Vladimir Bauer
7 years ago
| 317 | 317 | |
| 318 | 318 | multiplex := func(c <-chan time.Time) { |
| 319 | 319 | defer wg.Done() |
| 320 | // source channels are never closed (time.Ticker never closes associated | |
| 321 | // channel), so we cannot simply range over a c, instead we use select | |
| 322 | // inside infinite loop | |
| 320 | 323 | for { |
| 321 | 324 | select { |
| 322 | 325 | case v := <-c: |
| 323 | multiplexedStream <- v | |
| 326 | select { | |
| 327 | case multiplexedStream <- v: | |
| 328 | case <-done: | |
| 329 | return | |
| 330 | } | |
| 324 | 331 | case <-done: |
| 325 | 332 | return |
| 326 | 333 | } |