commit
31324e5417
@ -98,7 +98,7 @@ func TestMain(m *testing.M) {
|
|||||||
if err := cmd.Process.Signal(syscall.SIGTERM); err != nil {
|
if err := cmd.Process.Signal(syscall.SIGTERM); err != nil {
|
||||||
fmt.Fprintln(os.Stderr, err)
|
fmt.Fprintln(os.Stderr, err)
|
||||||
}
|
}
|
||||||
if _, err := cmd.Process.Wait(); err != nil {
|
if err := cmd.Wait(); err != nil {
|
||||||
fmt.Fprintln(os.Stderr, err)
|
fmt.Fprintln(os.Stderr, err)
|
||||||
}
|
}
|
||||||
if err := os.RemoveAll(defaultRoot); err != nil {
|
if err := os.RemoveAll(defaultRoot); err != nil {
|
||||||
|
13
io.go
13
io.go
@ -1,6 +1,7 @@
|
|||||||
package containerd
|
package containerd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -18,6 +19,13 @@ type IO struct {
|
|||||||
closer *wgCloser
|
closer *wgCloser
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *IO) Cancel() {
|
||||||
|
if i.closer == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
i.closer.Cancel()
|
||||||
|
}
|
||||||
|
|
||||||
func (i *IO) Wait() {
|
func (i *IO) Wait() {
|
||||||
if i.closer == nil {
|
if i.closer == nil {
|
||||||
return
|
return
|
||||||
@ -137,6 +145,7 @@ type wgCloser struct {
|
|||||||
wg *sync.WaitGroup
|
wg *sync.WaitGroup
|
||||||
dir string
|
dir string
|
||||||
set []io.Closer
|
set []io.Closer
|
||||||
|
cancel context.CancelFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *wgCloser) Wait() {
|
func (g *wgCloser) Wait() {
|
||||||
@ -152,3 +161,7 @@ func (g *wgCloser) Close() error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *wgCloser) Cancel() {
|
||||||
|
g.cancel()
|
||||||
|
}
|
||||||
|
@ -15,7 +15,7 @@ func copyIO(fifos *FIFOSet, ioset *ioSet, tty bool) (_ *wgCloser, err error) {
|
|||||||
var (
|
var (
|
||||||
f io.ReadWriteCloser
|
f io.ReadWriteCloser
|
||||||
set []io.Closer
|
set []io.Closer
|
||||||
ctx = context.Background()
|
ctx, cancel = context.WithCancel(context.Background())
|
||||||
wg = &sync.WaitGroup{}
|
wg = &sync.WaitGroup{}
|
||||||
)
|
)
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -23,6 +23,7 @@ func copyIO(fifos *FIFOSet, ioset *ioSet, tty bool) (_ *wgCloser, err error) {
|
|||||||
for _, f := range set {
|
for _, f := range set {
|
||||||
f.Close()
|
f.Close()
|
||||||
}
|
}
|
||||||
|
cancel()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -55,13 +56,14 @@ func copyIO(fifos *FIFOSet, ioset *ioSet, tty bool) (_ *wgCloser, err error) {
|
|||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func(r io.ReadCloser) {
|
go func(r io.ReadCloser) {
|
||||||
io.Copy(ioset.err, r)
|
io.Copy(ioset.err, r)
|
||||||
wg.Done()
|
|
||||||
r.Close()
|
r.Close()
|
||||||
|
wg.Done()
|
||||||
}(f)
|
}(f)
|
||||||
}
|
}
|
||||||
return &wgCloser{
|
return &wgCloser{
|
||||||
wg: wg,
|
wg: wg,
|
||||||
dir: fifos.Dir,
|
dir: fifos.Dir,
|
||||||
set: set,
|
set: set,
|
||||||
|
cancel: cancel,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,8 @@ func (p *process) Start(ctx context.Context) error {
|
|||||||
}
|
}
|
||||||
response, err := p.task.client.TaskService().Exec(ctx, request)
|
response, err := p.task.client.TaskService().Exec(ctx, request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
p.io.Cancel()
|
||||||
|
p.io.Wait()
|
||||||
p.io.Close()
|
p.io.Close()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user