loop drains the watcher consumer channel as fast as possible. It exits when the context is cancelled or quit is closed, triggering a controller stop.
()
| 226 | // It exits when the context is cancelled or quit is closed, triggering |
| 227 | // a controller stop. |
| 228 | func (c *Controller) loop() { |
| 229 | defer c.Stop() |
| 230 | for { |
| 231 | select { |
| 232 | case payload := <-c.consumer.Watch(): |
| 233 | slog.DebugContext(c.ctx, "received payload, queuing for processing") |
| 234 | select { |
| 235 | case c.eventQueue.In() <- payload: |
| 236 | case <-c.ctx.Done(): |
| 237 | return |
| 238 | case <-c.quit: |
| 239 | return |
| 240 | } |
| 241 | case <-c.ctx.Done(): |
| 242 | return |
| 243 | case <-c.quit: |
| 244 | return |
| 245 | } |
| 246 | } |
| 247 | } |