Merge pull request #23148 from mlaventure/wait-for-containerd-before-restarting-it

Wait for containerd to die before restarting it
This commit is contained in:
Alexander Morozov 2016-06-01 10:35:31 -07:00
commit cb36dddad1
1 changed files with 7 additions and 1 deletions

View File

@ -51,6 +51,7 @@ type remote struct {
eventTsPath string eventTsPath string
pastEvents map[string]*containerd.Event pastEvents map[string]*containerd.Event
runtimeArgs []string runtimeArgs []string
daemonWaitCh chan struct{}
} }
// New creates a fresh instance of libcontainerd remote. // New creates a fresh instance of libcontainerd remote.
@ -130,6 +131,7 @@ func (r *remote) handleConnectionChange() {
transientFailureCount = 0 transientFailureCount = 0
if utils.IsProcessAlive(r.daemonPid) { if utils.IsProcessAlive(r.daemonPid) {
utils.KillProcess(r.daemonPid) utils.KillProcess(r.daemonPid)
<-r.daemonWaitCh
} }
if err := r.runContainerdDaemon(); err != nil { //FIXME: Handle error if err := r.runContainerdDaemon(); err != nil { //FIXME: Handle error
logrus.Errorf("error restarting containerd: %v", err) logrus.Errorf("error restarting containerd: %v", err)
@ -390,7 +392,11 @@ func (r *remote) runContainerdDaemon() error {
return err return err
} }
go cmd.Wait() // Reap our child when needed r.daemonWaitCh = make(chan struct{})
go func() {
cmd.Wait()
close(r.daemonWaitCh)
}() // Reap our child when needed
r.daemonPid = cmd.Process.Pid r.daemonPid = cmd.Process.Pid
return nil return nil
} }