diff options
author | Daniel J Walsh <dwalsh@redhat.com> | 2021-02-03 07:54:12 -0500 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2021-02-08 13:59:12 -0500 |
commit | d620a77c67e6603e72bb6dc08e9a86bbefe8793a (patch) | |
tree | 5fea5822d8b526fcf5a2deefb3cc3d38248d089f | |
parent | 7819e49353b58fe87bdb74c33b2d999e3a7b563e (diff) | |
download | podman-d620a77c67e6603e72bb6dc08e9a86bbefe8793a.tar.gz podman-d620a77c67e6603e72bb6dc08e9a86bbefe8793a.tar.bz2 podman-d620a77c67e6603e72bb6dc08e9a86bbefe8793a.zip |
Fix invalid wait condition on kill
When using the compatability tests on kill, the kill
function goes into an infinite wait loop taking all of the CPU.
This change will use the correct wait function and exit properly.
Fixes: https://github.com/containers/podman/issues/9206
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
-rw-r--r-- | pkg/api/handlers/compat/containers.go | 4 | ||||
-rw-r--r-- | test/python/docker/test_containers.py | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/pkg/api/handlers/compat/containers.go b/pkg/api/handlers/compat/containers.go index b41987800..86508f938 100644 --- a/pkg/api/handlers/compat/containers.go +++ b/pkg/api/handlers/compat/containers.go @@ -233,8 +233,8 @@ func KillContainer(w http.ResponseWriter, r *http.Request) { return } if sig == 0 || syscall.Signal(sig) == syscall.SIGKILL { - var opts entities.WaitOptions - if _, err := containerEngine.ContainerWait(r.Context(), []string{name}, opts); err != nil { + if _, err := utils.WaitContainer(w, r); err != nil { + utils.Error(w, "Something went wrong.", http.StatusInternalServerError, err) return } diff --git a/test/python/docker/test_containers.py b/test/python/docker/test_containers.py index 01e049ed4..5c2a5fef2 100644 --- a/test/python/docker/test_containers.py +++ b/test/python/docker/test_containers.py @@ -95,6 +95,15 @@ class TestContainers(unittest.TestCase): top.reload() self.assertIn(top.status, ("stopped", "exited")) + def test_kill_container(self): + top = self.client.containers.get(TestContainers.topContainerId) + self.assertEqual(top.status, "running") + + # Kill a running container and validate the state + top.kill() + top.reload() + self.assertIn(top.status, ("stopped", "exited")) + def test_restart_container(self): # Validate the container state top = self.client.containers.get(TestContainers.topContainerId) |