Check status for stopped processes before wait
Fixes #1054 Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
16
task.go
16
task.go
@@ -79,18 +79,6 @@ type Task interface {
|
||||
Update(context.Context, ...UpdateTaskOpts) error
|
||||
}
|
||||
|
||||
type Process interface {
|
||||
Pid() uint32
|
||||
Start(context.Context) error
|
||||
Delete(context.Context) (uint32, error)
|
||||
Kill(context.Context, syscall.Signal) error
|
||||
Wait(context.Context) (uint32, error)
|
||||
CloseIO(context.Context, ...IOCloserOpts) error
|
||||
Resize(ctx context.Context, w, h uint32) error
|
||||
IO() *IO
|
||||
Status(context.Context) (Status, error)
|
||||
}
|
||||
|
||||
var _ = (Task)(&task{})
|
||||
|
||||
type task struct {
|
||||
@@ -171,6 +159,10 @@ func (t *task) Wait(ctx context.Context) (uint32, error) {
|
||||
if err != nil {
|
||||
return UnknownExitStatus, errdefs.FromGRPC(err)
|
||||
}
|
||||
// first check if the task has exited
|
||||
if status, _ := t.Status(ctx); status == Stopped {
|
||||
return UnknownExitStatus, errdefs.ErrUnavailable
|
||||
}
|
||||
for {
|
||||
evt, err := eventstream.Recv()
|
||||
if err != nil {
|
||||
|
Reference in New Issue
Block a user