diff --git a/libcontainerd/remote_linux.go b/libcontainerd/remote_linux.go index 6c51ea930f..1a6ccf387c 100644 --- a/libcontainerd/remote_linux.go +++ b/libcontainerd/remote_linux.go @@ -51,6 +51,7 @@ type remote struct { eventTsPath string pastEvents map[string]*containerd.Event runtimeArgs []string + daemonWaitCh chan struct{} } // New creates a fresh instance of libcontainerd remote. @@ -130,6 +131,7 @@ func (r *remote) handleConnectionChange() { transientFailureCount = 0 if utils.IsProcessAlive(r.daemonPid) { utils.KillProcess(r.daemonPid) + <-r.daemonWaitCh } if err := r.runContainerdDaemon(); err != nil { //FIXME: Handle error logrus.Errorf("error restarting containerd: %v", err) @@ -390,7 +392,11 @@ func (r *remote) runContainerdDaemon() error { 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 return nil }