diff --git a/solver/jobs.go b/solver/jobs.go index c7fb1c8fa9b5..d2a52c39e61b 100644 --- a/solver/jobs.go +++ b/solver/jobs.go @@ -619,8 +619,9 @@ type sharedOp struct { subBuilder *subBuilder err error - execRes *execRes - execErr error + execRes *execRes + execDone bool + execErr error cacheRes []*CacheMap cacheDone bool @@ -817,10 +818,10 @@ func (s *sharedOp) Exec(ctx context.Context, inputs []Result) (outputs []Result, } flightControlKey := "exec" res, err := s.g.Do(ctx, flightControlKey, func(ctx context.Context) (ret interface{}, retErr error) { - if s.execErr != nil { - return nil, s.execErr - } - if s.execRes != nil { + if s.execDone { + if s.execErr != nil { + return nil, s.execErr + } return s.execRes, nil } release, err := op.Acquire(ctx) @@ -857,6 +858,7 @@ func (s *sharedOp) Exec(ctx context.Context, inputs []Result) (outputs []Result, } } if complete { + s.execDone = true if res != nil { var subExporters []ExportableCacheKey s.subBuilder.mu.Lock()