diff --git a/daemon/container.go b/daemon/container.go index c29b4944b8..7d8133854b 100644 --- a/daemon/container.go +++ b/daemon/container.go @@ -767,23 +767,45 @@ func (container *Container) killPossiblyDeadProcess(sig int) error { } func (container *Container) Pause() error { - if container.IsPaused() { + container.Lock() + defer container.Unlock() + + // We cannot Pause the container which is already paused + if container.Paused { return fmt.Errorf("Container %s is already paused", container.ID) } - if !container.IsRunning() { + + // We cannot Pause the container which is not running + if !container.Running { return fmt.Errorf("Container %s is not running", container.ID) } - return container.daemon.Pause(container) + + if err := container.daemon.execDriver.Pause(container.command); err != nil { + return err + } + container.Paused = true + return nil } func (container *Container) Unpause() error { - if !container.IsPaused() { - return fmt.Errorf("Container %s is not paused", container.ID) + container.Lock() + defer container.Unlock() + + // We cannot unpause the container which is not paused + if !container.Paused { + return fmt.Errorf("Container %s is not paused, so what", container.ID) } - if !container.IsRunning() { + + // We cannot unpause the container which is not running + if !container.Running { return fmt.Errorf("Container %s is not running", container.ID) } - return container.daemon.Unpause(container) + + if err := container.daemon.execDriver.Unpause(container.command); err != nil { + return err + } + container.Paused = false + return nil } func (container *Container) Kill() error { diff --git a/daemon/daemon.go b/daemon/daemon.go index b82dd42a99..70f4a7b21b 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -1004,22 +1004,6 @@ func (daemon *Daemon) Run(c *Container, pipes *execdriver.Pipes, startCallback e return daemon.execDriver.Run(c.command, pipes, startCallback) } -func (daemon *Daemon) Pause(c *Container) error { - if err := daemon.execDriver.Pause(c.command); err != nil { - return err - } - c.SetPaused() - return nil -} - -func (daemon *Daemon) Unpause(c *Container) error { - if err := daemon.execDriver.Unpause(c.command); err != nil { - return err - } - c.SetUnpaused() - return nil -} - func (daemon *Daemon) Kill(c *Container, sig int) error { return daemon.execDriver.Kill(c.command, sig) }