Fix panic for task in unknown state.

Signed-off-by: Lantao Liu <lantaol@google.com>
This commit is contained in:
Lantao Liu 2019-09-02 00:50:22 -07:00
parent b5ec5ee4f6
commit c6203ec13b
2 changed files with 25 additions and 19 deletions

View File

@ -105,18 +105,20 @@ func (c *ContainerIO) Config() cio.Config {
// to output stream. // to output stream.
func (c *ContainerIO) Pipe() { func (c *ContainerIO) Pipe() {
wg := c.closer.wg wg := c.closer.wg
wg.Add(1) if c.stdout != nil {
go func() { wg.Add(1)
if _, err := io.Copy(c.stdoutGroup, c.stdout); err != nil { go func() {
logrus.WithError(err).Errorf("Failed to pipe stdout of container %q", c.id) if _, err := io.Copy(c.stdoutGroup, c.stdout); err != nil {
} logrus.WithError(err).Errorf("Failed to pipe stdout of container %q", c.id)
c.stdout.Close() }
c.stdoutGroup.Close() c.stdout.Close()
wg.Done() c.stdoutGroup.Close()
logrus.Infof("Finish piping stdout of container %q", c.id) wg.Done()
}() logrus.Infof("Finish piping stdout of container %q", c.id)
}()
}
if !c.fifos.Terminal { if !c.fifos.Terminal && c.stderr != nil {
wg.Add(1) wg.Add(1)
go func() { go func() {
if _, err := io.Copy(c.stderrGroup, c.stderr); err != nil { if _, err := io.Copy(c.stderrGroup, c.stderr); err != nil {

View File

@ -120,17 +120,21 @@ func newStdioPipes(fifos *cio.FIFOSet) (_ *stdioPipes, _ *wgCloser, err error) {
set = append(set, f) set = append(set, f)
} }
if f, err = fifo.OpenFifo(ctx, fifos.Stdout, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil { if fifos.Stdout != "" {
return nil, nil, err if f, err = fifo.OpenFifo(ctx, fifos.Stdout, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil {
return nil, nil, err
}
p.stdout = f
set = append(set, f)
} }
p.stdout = f
set = append(set, f)
if f, err = fifo.OpenFifo(ctx, fifos.Stderr, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil { if fifos.Stderr != "" {
return nil, nil, err if f, err = fifo.OpenFifo(ctx, fifos.Stderr, syscall.O_RDONLY|syscall.O_CREAT|syscall.O_NONBLOCK, 0700); err != nil {
return nil, nil, err
}
p.stderr = f
set = append(set, f)
} }
p.stderr = f
set = append(set, f)
return p, &wgCloser{ return p, &wgCloser{
wg: &sync.WaitGroup{}, wg: &sync.WaitGroup{},