defer close(sync), cb may panic
Vladimir Bauer
3 years ago
| 155 | 155 | sync := make(chan struct{}) |
| 156 | 156 | select { |
| 157 | 157 | case b.operateState <- func(s *bState) { |
| 158 | defer close(sync) | |
| 158 | 159 | for _, decorators := range [][]decor.Decorator{ |
| 159 | 160 | s.pDecorators, |
| 160 | 161 | s.aDecorators, |
| 163 | 164 | cb(extractBaseDecorator(d)) |
| 164 | 165 | } |
| 165 | 166 | } |
| 166 | close(sync) | |
| 167 | 167 | }: |
| 168 | 168 | <-sync |
| 169 | 169 | case <-b.done: |
| 158 | 158 | sync := make(chan struct{}) |
| 159 | 159 | select { |
| 160 | 160 | case p.operateState <- func(s *pState) { |
| 161 | defer close(sync) | |
| 161 | 162 | for i := 0; i < s.bHeap.Len(); i++ { |
| 162 | 163 | bar := s.bHeap[i] |
| 163 | 164 | if !cb(bar) { |
| 164 | 165 | break |
| 165 | 166 | } |
| 166 | 167 | } |
| 167 | close(sync) | |
| 168 | 168 | }: |
| 169 | 169 | <-sync |
| 170 | 170 | case <-p.done: |