It looks like the goroutine will be left running when kata-agent RemoveContainer() returns after a timeout. In addition, the sandbox lock is no longer held so any actions taken by the goroutine could cause problems. Am I understanding the code correctly? func (a *agentGRPC) RemoveContainer(ctx context.Context, req *pb.RemoveContainerRequest) (*gpb.Empty, error) { ... timeout := int(req.Timeout) a.sandbox.Lock() defer a.sandbox.Unlock() if timeout == 0 { ... } else { done := make(chan error) go func() { if err := ctr.removeContainer(); err != nil { done <- err close(done) return } //Find the sandbox storage used by this container for _, path := range ctr.mounts { if _, ok := a.sandbox.storages[path]; ok { if err := a.sandbox.unsetAndRemoveSandboxStorage(path); err != nil { done <- err close(done) return } } } close(done) }() select { case err := <-done: if err != nil { return emptyResp, err } case <-time.After(time.Duration(req.Timeout) * time.Second): return emptyResp, grpcStatus.Errorf(codes.DeadlineExceeded, "Timeout reached after %ds", timeout) Stefan