From a03fdabc14af3038177d91dd7268d4751fabd810 Mon Sep 17 00:00:00 2001 From: Lantao Liu Date: Thu, 30 Nov 2017 23:19:12 +0000 Subject: [PATCH] Close FIFOs on failure. Signed-off-by: Lantao Liu --- container.go | 8 +++++++- task.go | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/container.go b/container.go index 2d5c9aedb..716e0456c 100644 --- a/container.go +++ b/container.go @@ -162,11 +162,17 @@ func (c *container) Image(ctx context.Context) (Image, error) { }, nil } -func (c *container) NewTask(ctx context.Context, ioCreate cio.Creation, opts ...NewTaskOpts) (Task, error) { +func (c *container) NewTask(ctx context.Context, ioCreate cio.Creation, opts ...NewTaskOpts) (_ Task, err error) { i, err := ioCreate(c.id) if err != nil { return nil, err } + defer func() { + if err != nil && i != nil { + i.Cancel() + i.Close() + } + }() cfg := i.Config() request := &tasks.CreateTaskRequest{ ContainerID: c.id, diff --git a/task.go b/task.go index 2cbcbaff1..8d256834f 100644 --- a/task.go +++ b/task.go @@ -277,7 +277,7 @@ func (t *task) Delete(ctx context.Context, opts ...ProcessDeleteOpts) (*ExitStat return &ExitStatus{code: r.ExitStatus, exitedAt: r.ExitedAt}, nil } -func (t *task) Exec(ctx context.Context, id string, spec *specs.Process, ioCreate cio.Creation) (Process, error) { +func (t *task) Exec(ctx context.Context, id string, spec *specs.Process, ioCreate cio.Creation) (_ Process, err error) { if id == "" { return nil, errors.Wrapf(errdefs.ErrInvalidArgument, "exec id must not be empty") } @@ -285,6 +285,12 @@ func (t *task) Exec(ctx context.Context, id string, spec *specs.Process, ioCreat if err != nil { return nil, err } + defer func() { + if err != nil && i != nil { + i.Cancel() + i.Close() + } + }() any, err := typeurl.MarshalAny(spec) if err != nil { return nil, err