shimv2: multi wait support for wait service

Support multi wait on one container/exec process.

Fixes: #1131

Signed-off-by: fupan <lifupan@gmail.com>
This commit is contained in:
fupan 2019-01-16 12:17:43 +08:00
parent 3a2c0a6506
commit 5ba30fd628

View File

@ -728,12 +728,20 @@ func (s *service) Wait(ctx context.Context, r *taskAPI.WaitRequest) (*taskAPI.Wa
//wait for container //wait for container
if r.ExecID == "" { if r.ExecID == "" {
ret = <-c.exitCh ret = <-c.exitCh
// refill the exitCh with the container process's exit code in case
// there were other waits on this process.
c.exitCh <- ret
} else { //wait for exec } else { //wait for exec
execs, err := c.getExec(r.ExecID) execs, err := c.getExec(r.ExecID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
ret = <-execs.exitCh ret = <-execs.exitCh
// refill the exitCh with the exec process's exit code in case
// there were other waits on this process.
execs.exitCh <- ret
} }
return &taskAPI.WaitResponse{ return &taskAPI.WaitResponse{