diff options
author | Daniel J Walsh <dwalsh@redhat.com> | 2018-06-22 05:32:45 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-22 05:32:45 -0400 |
commit | 4ad7e7368140f4677f8919f647cd5d6951d7e60e (patch) | |
tree | 3fd80de296f177c9cce8ec611a6dcf7c5022033a /libpod/container_attach.go | |
parent | 4bd0f229e453ea8976978a422a011cc774870346 (diff) | |
parent | da44d8d5c839c7e09714495a7b121d8aa8664413 (diff) | |
download | podman-4ad7e7368140f4677f8919f647cd5d6951d7e60e.tar.gz podman-4ad7e7368140f4677f8919f647cd5d6951d7e60e.tar.bz2 podman-4ad7e7368140f4677f8919f647cd5d6951d7e60e.zip |
Merge pull request #970 from giuseppe/fix-start-attach
libpod: fix race with attach/start
Diffstat (limited to 'libpod/container_attach.go')
-rw-r--r-- | libpod/container_attach.go | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libpod/container_attach.go b/libpod/container_attach.go index ffe3a5edc..29e2d2fa6 100644 --- a/libpod/container_attach.go +++ b/libpod/container_attach.go @@ -44,7 +44,7 @@ type AttachStreams struct { // Attach to the given container // Does not check if state is appropriate -func (c *Container) attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize) error { +func (c *Container) attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize, startContainer bool) error { if !streams.AttachOutput && !streams.AttachError && !streams.AttachInput { return errors.Wrapf(ErrInvalidArg, "must provide at least one stream to attach to") } @@ -61,12 +61,12 @@ func (c *Container) attach(streams *AttachStreams, keys string, resize <-chan re logrus.Debugf("Attaching to container %s", c.ID()) - return c.attachContainerSocket(resize, detachKeys, streams) + return c.attachContainerSocket(resize, detachKeys, streams, startContainer) } // attachContainerSocket connects to the container's attach socket and deals with the IO // TODO add a channel to allow interrupting -func (c *Container) attachContainerSocket(resize <-chan remotecommand.TerminalSize, detachKeys []byte, streams *AttachStreams) error { +func (c *Container) attachContainerSocket(resize <-chan remotecommand.TerminalSize, detachKeys []byte, streams *AttachStreams, startContainer bool) error { kubeutils.HandleResizing(resize, func(size remotecommand.TerminalSize) { controlPath := filepath.Join(c.bundlePath(), "ctl") controlFile, err := os.OpenFile(controlPath, unix.O_WRONLY, 0) @@ -89,6 +89,12 @@ func (c *Container) attachContainerSocket(resize <-chan remotecommand.TerminalSi } defer conn.Close() + if startContainer { + if err := c.start(); err != nil { + return err + } + } + receiveStdoutError := make(chan error) if streams.AttachOutput || streams.AttachError { go func() { |