浏览代码

Set unpasued state when receiving 'stateExit' event

Description:
 1. start a container with restart=always.
    `docker run -d --restart=always ubuntu sleep 3`
 2. container init process exits.
 3. use `docker pause <id>` to pause this container.

if the pause action is before cgroup data is removed and after the init process died.
`Pause` operation will success to write cgroup data, but actually do not freeze any process.

And then docker received pause event and stateExit event from
containerd, the docker state will be Running(paused), but the container
is free running.

Then we can not remove it, stop it , pause it  and unpause it.

Signed-off-by: Wentao Zhang <zhangwentao234@huawei.com>
Wentao Zhang 8 年之前
父节点
当前提交
fe1b4cfba6
共有 1 个文件被更改,包括 2 次插入0 次删除
  1. 2 0
      container/state.go

+ 2 - 0
container/state.go

@@ -278,6 +278,7 @@ func (s *State) SetRunning(pid int, initial bool) {
 	s.ErrorMsg = ""
 	s.ErrorMsg = ""
 	s.Running = true
 	s.Running = true
 	s.Restarting = false
 	s.Restarting = false
+	s.Paused = false
 	s.ExitCodeValue = 0
 	s.ExitCodeValue = 0
 	s.Pid = pid
 	s.Pid = pid
 	if initial {
 	if initial {
@@ -304,6 +305,7 @@ func (s *State) SetRestarting(exitStatus *ExitStatus) {
 	// all the checks in docker around rm/stop/etc
 	// all the checks in docker around rm/stop/etc
 	s.Running = true
 	s.Running = true
 	s.Restarting = true
 	s.Restarting = true
+	s.Paused = false
 	s.Pid = 0
 	s.Pid = 0
 	s.FinishedAt = time.Now().UTC()
 	s.FinishedAt = time.Now().UTC()
 	s.setFromExitStatus(exitStatus)
 	s.setFromExitStatus(exitStatus)