Browse Source

Wait for containerd to die before restarting it

Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
Kenfe-Mickael Laventure 9 năm trước cách đây
mục cha
commit
ce160b37e1
1 tập tin đã thay đổi với 7 bổ sung1 xóa
  1. 7 1
      libcontainerd/remote_linux.go

+ 7 - 1
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
 }