diff --git a/integration-cli/docker_api_containers_test.go b/integration-cli/docker_api_containers_test.go index 57a35ba85f..b3c135fc28 100644 --- a/integration-cli/docker_api_containers_test.go +++ b/integration-cli/docker_api_containers_test.go @@ -1231,7 +1231,7 @@ func (s *DockerSuite) TestContainerApiPostContainerStop(c *check.C) { c.Assert(err, checker.IsNil) // 204 No Content is expected, not 200 c.Assert(statusCode, checker.Equals, http.StatusNoContent) - c.Assert(waitInspect(containerID, "{{ .State.Running }}", "false", 5*time.Second), checker.IsNil) + c.Assert(waitInspect(containerID, "{{ .State.Running }}", "false", 60*time.Second), checker.IsNil) } // #14170 diff --git a/libcontainerd/container_windows.go b/libcontainerd/container_windows.go index 40517f59c8..cee7464faa 100644 --- a/libcontainerd/container_windows.go +++ b/libcontainerd/container_windows.go @@ -167,11 +167,6 @@ func (ctr *container) waitExit(pid uint32, processFriendlyName string, isFirstPr logrus.Debugf("Completed shutting down container %s", ctr.containerID) } - // BUGBUG - Is taking the lock necessary here? Should it just be taken for - // the deleteContainer call, not for the restart logic? @jhowardmsft - ctr.client.lock(ctr.containerID) - defer ctr.client.unlock(ctr.containerID) - if si.State == StateExit && ctr.restartManager != nil { restart, wait, err := ctr.restartManager.ShouldRestart(uint32(exitCode), false) if err != nil { @@ -182,6 +177,7 @@ func (ctr *container) waitExit(pid uint32, processFriendlyName string, isFirstPr go func() { err := <-wait ctr.restarting = false + ctr.client.deleteContainer(ctr.friendlyName) if err != nil { si.State = StateExit if err := ctr.client.backend.StateChanged(ctr.containerID, si); err != nil {