|
@@ -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
|
|
|
}
|