diff --git a/src/runtime/containerd-shim-v2/start.go b/src/runtime/containerd-shim-v2/start.go index 72420e411e..60306d428e 100644 --- a/src/runtime/containerd-shim-v2/start.go +++ b/src/runtime/containerd-shim-v2/start.go @@ -13,8 +13,14 @@ import ( "github.com/kata-containers/kata-containers/src/runtime/pkg/katautils" ) -func startContainer(ctx context.Context, s *service, c *container) error { - //start a container +func startContainer(ctx context.Context, s *service, c *container) (retErr error) { + defer func() { + if retErr != nil { + // notify the wait goroutine to continue + c.exitCh <- exitCode255 + } + }() + // start a container if c.cType == "" { err := fmt.Errorf("Bug, the container %s type is empty", c.id) return err @@ -87,8 +93,8 @@ func startContainer(ctx context.Context, s *service, c *container) error { return nil } -func startExec(ctx context.Context, s *service, containerID, execID string) (*exec, error) { - //start an exec +func startExec(ctx context.Context, s *service, containerID, execID string) (e *exec, retErr error) { + // start an exec c, err := s.getContainer(containerID) if err != nil { return nil, err @@ -99,6 +105,13 @@ func startExec(ctx context.Context, s *service, containerID, execID string) (*ex return nil, err } + defer func() { + if retErr != nil { + // notify the wait goroutine to continue + execs.exitCh <- exitCode255 + } + }() + _, proc, err := s.sandbox.EnterContainer(ctx, containerID, *execs.cmds) if err != nil { err := fmt.Errorf("cannot enter container %s, with err %s", containerID, err)