diff --git a/examples/plugins/traffic-control/docker.go b/examples/plugins/traffic-control/docker.go index 492427d7b..f2c1a78c4 100644 --- a/examples/plugins/traffic-control/docker.go +++ b/examples/plugins/traffic-control/docker.go @@ -29,36 +29,34 @@ func NewDockerClient(store *Store) (*DockerClient, error) { // Start docker client func (c *DockerClient) Start() { for { - c.loopIteration() + func() { + events := make(chan *docker.APIEvents) + if err := c.client.AddEventListener(events); err != nil { + log.Error(err) + return + } + defer func() { + if err := c.client.RemoveEventListener(events); err != nil { + log.Error(err) + } + }() + if err := c.getContainers(); err != nil { + log.Error(err) + return + } + for { + event, ok := <-events + if !ok { + log.Error("event listener unexpectedly disconnected") + return + } + c.handleEvent(event) + } + }() time.Sleep(time.Second) } } -func (c *DockerClient) loopIteration() { - events := make(chan *docker.APIEvents) - if err := c.client.AddEventListener(events); err != nil { - log.Error(err) - return - } - defer func() { - if err := c.client.RemoveEventListener(events); err != nil { - log.Error(err) - } - }() - if err := c.getContainers(); err != nil { - log.Error(err) - return - } - for { - event, ok := <-events - if !ok { - log.Error("event listener unexpectedly disconnected") - return - } - c.handleEvent(event) - } -} - func (c *DockerClient) getContainers() error { apiContainers, err := c.client.ListContainers(docker.ListContainersOptions{All: true}) if err != nil {