Explorar o código

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

Wait for containerd to die before restarting it
Alexander Morozov %!s(int64=9) %!d(string=hai) anos
pai
achega
cb36dddad1
Modificáronse 1 ficheiros con 7 adicións e 1 borrados
  1. 7 1
      libcontainerd/remote_linux.go

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