@@ -16,7 +16,6 @@ import (
16
16
"path/filepath"
17
17
"sort"
18
18
"strings"
19
- "sync"
20
19
"time"
21
20
22
21
"github.com/Sirupsen/logrus"
@@ -524,10 +523,7 @@ func (b *Builder) run(cID string) (err error) {
524
523
}()
525
524
526
525
finished := make (chan struct {})
527
- var once sync.Once
528
- finish := func () { close (finished ) }
529
526
cancelErrCh := make (chan error , 1 )
530
- defer once .Do (finish )
531
527
go func () {
532
528
select {
533
529
case <- b .clientCtx .Done ():
@@ -541,22 +537,37 @@ func (b *Builder) run(cID string) (err error) {
541
537
}()
542
538
543
539
if err := b .docker .ContainerStart (cID , nil , true , "" ); err != nil {
540
+ close (finished )
541
+ if cancelErr := <- cancelErrCh ; cancelErr != nil {
542
+ logrus .Debugf ("Build cancelled (%v) and got an error from ContainerStart: %v" ,
543
+ cancelErr , err )
544
+ }
544
545
return err
545
546
}
546
547
547
548
// Block on reading output from container, stop on err or chan closed
548
549
if err := <- errCh ; err != nil {
550
+ close (finished )
551
+ if cancelErr := <- cancelErrCh ; cancelErr != nil {
552
+ logrus .Debugf ("Build cancelled (%v) and got an error from errCh: %v" ,
553
+ cancelErr , err )
554
+ }
549
555
return err
550
556
}
551
557
552
558
if ret , _ := b .docker .ContainerWait (cID , - 1 ); ret != 0 {
559
+ close (finished )
560
+ if cancelErr := <- cancelErrCh ; cancelErr != nil {
561
+ logrus .Debugf ("Build cancelled (%v) and got a non-zero code from ContainerWait: %d" ,
562
+ cancelErr , ret )
563
+ }
553
564
// TODO: change error type, because jsonmessage.JSONError assumes HTTP
554
565
return & jsonmessage.JSONError {
555
566
Message : fmt .Sprintf ("The command '%s' returned a non-zero code: %d" , strings .Join (b .runConfig .Cmd , " " ), ret ),
556
567
Code : ret ,
557
568
}
558
569
}
559
- once . Do ( finish )
570
+ close ( finished )
560
571
return <- cancelErrCh
561
572
}
562
573
0 commit comments