Signed-off-by: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
| ... | ... |
@@ -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" |
| ... | ... |
@@ -523,10 +522,7 @@ func (b *Builder) run(cID string) (err error) {
|
| 523 | 523 |
}() |
| 524 | 524 |
|
| 525 | 525 |
finished := make(chan struct{})
|
| 526 |
- var once sync.Once |
|
| 527 |
- finish := func() { close(finished) }
|
|
| 528 | 526 |
cancelErrCh := make(chan error, 1) |
| 529 |
- defer once.Do(finish) |
|
| 530 | 527 |
go func() {
|
| 531 | 528 |
select {
|
| 532 | 529 |
case <-b.clientCtx.Done(): |
| ... | ... |
@@ -540,22 +536,37 @@ func (b *Builder) run(cID string) (err error) {
|
| 540 | 540 |
}() |
| 541 | 541 |
|
| 542 | 542 |
if err := b.docker.ContainerStart(cID, nil, true, ""); err != nil {
|
| 543 |
+ close(finished) |
|
| 544 |
+ if cancelErr := <-cancelErrCh; cancelErr != nil {
|
|
| 545 |
+ logrus.Debugf("Build cancelled (%v) and got an error from ContainerStart: %v",
|
|
| 546 |
+ cancelErr, err) |
|
| 547 |
+ } |
|
| 543 | 548 |
return err |
| 544 | 549 |
} |
| 545 | 550 |
|
| 546 | 551 |
// Block on reading output from container, stop on err or chan closed |
| 547 | 552 |
if err := <-errCh; err != nil {
|
| 553 |
+ close(finished) |
|
| 554 |
+ if cancelErr := <-cancelErrCh; cancelErr != nil {
|
|
| 555 |
+ logrus.Debugf("Build cancelled (%v) and got an error from errCh: %v",
|
|
| 556 |
+ cancelErr, err) |
|
| 557 |
+ } |
|
| 548 | 558 |
return err |
| 549 | 559 |
} |
| 550 | 560 |
|
| 551 | 561 |
if ret, _ := b.docker.ContainerWait(cID, -1); ret != 0 {
|
| 562 |
+ close(finished) |
|
| 563 |
+ if cancelErr := <-cancelErrCh; cancelErr != nil {
|
|
| 564 |
+ logrus.Debugf("Build cancelled (%v) and got a non-zero code from ContainerWait: %d",
|
|
| 565 |
+ cancelErr, ret) |
|
| 566 |
+ } |
|
| 552 | 567 |
// TODO: change error type, because jsonmessage.JSONError assumes HTTP |
| 553 | 568 |
return &jsonmessage.JSONError{
|
| 554 | 569 |
Message: fmt.Sprintf("The command '%s' returned a non-zero code: %d", strings.Join(b.runConfig.Cmd, " "), ret),
|
| 555 | 570 |
Code: ret, |
| 556 | 571 |
} |
| 557 | 572 |
} |
| 558 |
- once.Do(finish) |
|
| 573 |
+ close(finished) |
|
| 559 | 574 |
return <-cancelErrCh |
| 560 | 575 |
} |
| 561 | 576 |
|