Don't hog task queue while waiting for exec process
Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
This commit is contained in:
parent
578bf0c70e
commit
920a9c21d7
1 changed files with 14 additions and 8 deletions
|
@ -73,13 +73,19 @@ func (s *Supervisor) execExit(t *ExecExitTask) error {
|
|||
if err := container.RemoveProcess(t.PID); err != nil {
|
||||
logrus.WithField("error", err).Error("containerd: find container for pid")
|
||||
}
|
||||
t.Process.Wait()
|
||||
s.notifySubscribers(Event{
|
||||
Timestamp: time.Now(),
|
||||
ID: t.ID,
|
||||
Type: StateExit,
|
||||
PID: t.PID,
|
||||
Status: t.Status,
|
||||
})
|
||||
// If the exec spawned children which are still using its IO
|
||||
// waiting here will block until they die or close their IO
|
||||
// descriptors.
|
||||
// Hence, we use a go routine to avoid block all other operations
|
||||
go func() {
|
||||
t.Process.Wait()
|
||||
s.notifySubscribers(Event{
|
||||
Timestamp: time.Now(),
|
||||
ID: t.ID,
|
||||
Type: StateExit,
|
||||
PID: t.PID,
|
||||
Status: t.Status,
|
||||
})
|
||||
}()
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue