diff --git a/libcontainerd/remote_linux.go b/libcontainerd/remote_linux.go index d19372d7bd..bad7a58ec8 100644 --- a/libcontainerd/remote_linux.go +++ b/libcontainerd/remote_linux.go @@ -50,6 +50,7 @@ type remote struct { eventTsPath string pastEvents map[string]*containerd.Event runtimeArgs []string + daemonWaitCh chan struct{} } // New creates a fresh instance of libcontainerd remote. @@ -129,6 +130,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) @@ -388,7 +390,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 }