diff --git a/daemon/build.go b/daemon/build.go index 730b6b184cfceb87f4a5542b3ff95a6eee0b5e2a..f84c69cd1908468f3b85bc99fdfa3fe227929e16 100644 --- a/daemon/build.go +++ b/daemon/build.go @@ -62,6 +62,7 @@ func (b *Backend) Build(req *pb.BuildRequest, stream pb.Control_BuildServer) (er eg, ctx = errgroup.WithContext(ctx) eg.Go(func() error { b.syncBuildStatus(req.BuildID) <- struct{}{} + close(b.status[req.BuildID].startBuild) imageID, err = builder.Build() // in case there is error during Build stage, the backend will always waiting for content write into diff --git a/daemon/status.go b/daemon/status.go index efcc8a77abce055a83bc627a2fe0c2b7ed1156a7..4b217c58646b81fd11592bd827a5642aa73d5c7f 100644 --- a/daemon/status.go +++ b/daemon/status.go @@ -32,7 +32,12 @@ func (b *Backend) Status(req *pb.StatusRequest, stream pb.Control_StatusServer) }).Info("StatusRequest received") // waiting for Build start first so that the builder with req.BuildID will be set already - <-b.syncBuildStatus(req.BuildID) + select { + case <-b.syncBuildStatus(req.BuildID): + case <-stream.Context().Done(): + b.deleteStatus(req.BuildID) + return nil + } builder, err := b.daemon.Builder(req.BuildID) if err != nil {