labeled break for each case
labeled break is needed to break out of both the select and the for loop
Vladimir Bauer
2 years ago
| 45 | 45 | var sync bool |
| 46 | 46 | |
| 47 | 47 | for req := range m { |
| 48 | next: | |
| 49 | 48 | switch req.cmd { |
| 50 | 49 | case h_push: |
| 51 | 50 | data := req.data.(pushData) |
| 74 | 73 | syncWidth(aMatrix, drop) |
| 75 | 74 | case h_iter: |
| 76 | 75 | data := req.data.(iterData) |
| 76 | drop_iter: | |
| 77 | 77 | for _, b := range bHeap { |
| 78 | 78 | select { |
| 79 | 79 | case data.iter <- b: |
| 80 | 80 | case <-data.drop: |
| 81 | close(data.iter) | |
| 82 | break next | |
| 81 | break drop_iter | |
| 83 | 82 | } |
| 84 | 83 | } |
| 85 | 84 | close(data.iter) |
| 86 | 85 | case h_drain: |
| 87 | 86 | data := req.data.(iterData) |
| 87 | drop_drain: | |
| 88 | 88 | for bHeap.Len() != 0 { |
| 89 | 89 | select { |
| 90 | 90 | case data.iter <- heap.Pop(&bHeap).(*Bar): |
| 91 | 91 | case <-data.drop: |
| 92 | close(data.iter) | |
| 93 | break next | |
| 92 | break drop_drain | |
| 94 | 93 | } |
| 95 | 94 | } |
| 96 | 95 | close(data.iter) |