| 481 | } |
| 482 | |
| 483 | func waitContainerStop(ctx context.Context, task containerd.Task, exitCh <-chan containerd.ExitStatus, id string) error { |
| 484 | select { |
| 485 | case <-ctx.Done(): |
| 486 | if err := ctx.Err(); err != nil { |
| 487 | return fmt.Errorf("wait container %v: %w", id, err) |
| 488 | } |
| 489 | return nil |
| 490 | case status := <-exitCh: |
| 491 | // Cleanup the IO after a successful Stop |
| 492 | if io := task.IO(); io != nil { |
| 493 | if cerr := io.Close(); cerr != nil { |
| 494 | log.G(ctx).Warnf("failed to close IO for container %s: %v", id, cerr) |
| 495 | } |
| 496 | } |
| 497 | return status.Error() |
| 498 | } |
| 499 | } |
| 500 | |
| 501 | // Pause pauses a container by its id. |
| 502 | func Pause(ctx context.Context, client *containerd.Client, id string) error { |