From aa808a650585daf17dcbcd13d4d68e7398d4dfd9 Mon Sep 17 00:00:00 2001 From: Nan Deng Date: Wed, 2 Jul 2014 18:06:54 -0700 Subject: [PATCH] fix data race introduced by 1798e0f --- pkg/kubelet/kubelet.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index b5b4d40fa60..ea1392fa8e9 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -689,11 +689,13 @@ func (kl *Kubelet) syncManifest(manifest *api.ContainerManifest, keepChannel cha return nil } +type empty struct{} + // Sync the configured list of containers (desired state) with the host current state func (kl *Kubelet) SyncManifests(config []api.ContainerManifest) error { glog.Infof("Desired: %+v", config) var err error - dockerIdsToKeep := map[DockerID]bool{} + dockerIdsToKeep := map[DockerID]empty{} keepChannel := make(chan DockerID) waitGroup := sync.WaitGroup{} @@ -711,15 +713,18 @@ func (kl *Kubelet) SyncManifests(config []api.ContainerManifest) error { } }(ix) } + ch := make(chan bool) go func() { for id := range keepChannel { - dockerIdsToKeep[id] = true + dockerIdsToKeep[id] = empty{} } + ch <- true }() if len(config) > 0 { waitGroup.Wait() - close(keepChannel) } + close(keepChannel) + <-ch // Kill any containers we don't need existingContainers, err := kl.getDockerContainers() @@ -728,7 +733,7 @@ func (kl *Kubelet) SyncManifests(config []api.ContainerManifest) error { return err } for id, container := range existingContainers { - if !dockerIdsToKeep[id] { + if _, ok := dockerIdsToKeep[id]; !ok { glog.Infof("Killing: %s", id) err = kl.killContainer(container) if err != nil {