mirror of https://github.com/knative/func.git
Fix deadlock (#2630)
* Fix deadlock Signed-off-by: Matej Vašek <mvasek@redhat.com> * Rework digest detection Signed-off-by: Matej Vašek <mvasek@redhat.com> --------- Signed-off-by: Matej Vašek <mvasek@redhat.com>
This commit is contained in:
parent
1122bf76f4
commit
8475f864b9
|
@ -189,43 +189,45 @@ func buildBuilderImage(ctx context.Context, variant, arch string) (string, error
|
||||||
}(rc)
|
}(rc)
|
||||||
|
|
||||||
pr, pw := io.Pipe()
|
pr, pw := io.Pipe()
|
||||||
digestCh := make(chan string)
|
|
||||||
go func() {
|
|
||||||
var (
|
|
||||||
jm jsonmessage.JSONMessage
|
|
||||||
dec = json.NewDecoder(pr)
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
for {
|
|
||||||
err = dec.Decode(&jm)
|
|
||||||
if err != nil {
|
|
||||||
if errors.Is(err, io.EOF) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if jm.Error != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
re := regexp.MustCompile(`\sdigest: (?P<hash>sha256:[a-zA-Z0-9]+)\s`)
|
|
||||||
matches := re.FindStringSubmatch(jm.Status)
|
|
||||||
if len(matches) == 2 {
|
|
||||||
digestCh <- matches[1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
r := io.TeeReader(rc, pw)
|
r := io.TeeReader(rc, pw)
|
||||||
|
|
||||||
fd := os.Stdout.Fd()
|
go func() {
|
||||||
isTerminal := term.IsTerminal(int(os.Stdout.Fd()))
|
fd := os.Stdout.Fd()
|
||||||
err = jsonmessage.DisplayJSONMessagesStream(r, os.Stderr, fd, isTerminal, nil)
|
isTerminal := term.IsTerminal(int(os.Stdout.Fd()))
|
||||||
_ = pw.Close()
|
e := jsonmessage.DisplayJSONMessagesStream(pr, os.Stderr, fd, isTerminal, nil)
|
||||||
if err != nil {
|
_ = pr.CloseWithError(e)
|
||||||
return "", err
|
}()
|
||||||
|
|
||||||
|
var (
|
||||||
|
digest string
|
||||||
|
jm jsonmessage.JSONMessage
|
||||||
|
dec = json.NewDecoder(r)
|
||||||
|
re = regexp.MustCompile(`\sdigest: (?P<hash>sha256:[a-zA-Z0-9]+)\s`)
|
||||||
|
)
|
||||||
|
for {
|
||||||
|
err = dec.Decode(&jm)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if jm.Error != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
matches := re.FindStringSubmatch(jm.Status)
|
||||||
|
if len(matches) == 2 {
|
||||||
|
digest = matches[1]
|
||||||
|
_, _ = io.Copy(io.Discard, r)
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return <-digestCh, nil
|
if digest == "" {
|
||||||
|
return "", fmt.Errorf("digest not found")
|
||||||
|
}
|
||||||
|
return digest, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var d string
|
var d string
|
||||||
|
|
Loading…
Reference in New Issue