mirror of https://github.com/docker/docs.git
				
				
				
			Merge pull request #22712 from swernli/update_fix
Fixing Windows update logic.
This commit is contained in:
		
						commit
						04eaa74901
					
				| 
						 | 
				
			
			@ -54,10 +54,7 @@ func (daemon *Daemon) StateChanged(id string, e libcontainerd.StateInfo) error {
 | 
			
		|||
			"exitCode": strconv.Itoa(int(e.ExitCode)),
 | 
			
		||||
		}
 | 
			
		||||
		daemon.LogContainerEventWithAttributes(c, "die", attributes)
 | 
			
		||||
		if err := c.ToDisk(); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		return daemon.postRunProcessing(c, e)
 | 
			
		||||
		return c.ToDisk()
 | 
			
		||||
	case libcontainerd.StateExitProcess:
 | 
			
		||||
		c.Lock()
 | 
			
		||||
		defer c.Unlock()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -344,6 +344,8 @@ func (clnt *client) Signal(containerID string, sig int) error {
 | 
			
		|||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cont.manualStopRequested = true
 | 
			
		||||
 | 
			
		||||
	logrus.Debugf("lcd: Signal() containerID=%s sig=%d pid=%d", containerID, sig, cont.systemPid)
 | 
			
		||||
	context := fmt.Sprintf("Signal: sig=%d pid=%d", sig, cont.systemPid)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -352,7 +354,6 @@ func (clnt *client) Signal(containerID string, sig int) error {
 | 
			
		|||
		if err := hcsshim.TerminateComputeSystem(containerID, hcsshim.TimeoutInfinite, context); err != nil {
 | 
			
		||||
			logrus.Errorf("Failed to terminate %s - %q", containerID, err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	} else {
 | 
			
		||||
		// Terminate Process
 | 
			
		||||
		if err = hcsshim.TerminateProcessInComputeSystem(containerID, cont.systemPid); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -360,24 +361,8 @@ func (clnt *client) Signal(containerID string, sig int) error {
 | 
			
		|||
			// Ignore errors
 | 
			
		||||
			err = nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Shutdown the compute system
 | 
			
		||||
		const shutdownTimeout = 5 * 60 * 1000 // 5 minutes
 | 
			
		||||
		if err := hcsshim.ShutdownComputeSystem(containerID, shutdownTimeout, context); err != nil {
 | 
			
		||||
			if herr, ok := err.(*hcsshim.HcsError); !ok ||
 | 
			
		||||
				(herr.Err != hcsshim.ERROR_SHUTDOWN_IN_PROGRESS &&
 | 
			
		||||
					herr.Err != ErrorBadPathname &&
 | 
			
		||||
					herr.Err != syscall.ERROR_PATH_NOT_FOUND) {
 | 
			
		||||
				logrus.Debugf("signal - error from ShutdownComputeSystem %v on %s. Calling TerminateComputeSystem", err, containerID)
 | 
			
		||||
				if err := hcsshim.TerminateComputeSystem(containerID, shutdownTimeout, "signal"); err != nil {
 | 
			
		||||
					logrus.Debugf("signal - ignoring error from TerminateComputeSystem on %s %v", containerID, err)
 | 
			
		||||
				} else {
 | 
			
		||||
					logrus.Debugf("Successful TerminateComputeSystem after failed ShutdownComputeSystem on %s during signal %v", containerID, sig)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			logrus.Errorf("Failed to shutdown %s - %q", containerID, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,8 @@ type container struct {
 | 
			
		|||
	// but can be called from the RestartManager context which does not
 | 
			
		||||
	// otherwise have access to the Spec
 | 
			
		||||
	ociSpec Spec
 | 
			
		||||
 | 
			
		||||
	manualStopRequested bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ctr *container) newProcess(friendlyName string) *process {
 | 
			
		||||
| 
						 | 
				
			
			@ -163,11 +165,10 @@ func (ctr *container) waitExit(pid uint32, processFriendlyName string, isFirstPr
 | 
			
		|||
	// But it could have been an exec'd process which exited
 | 
			
		||||
	if !isFirstProcessToStart {
 | 
			
		||||
		si.State = StateExitProcess
 | 
			
		||||
	}
 | 
			
		||||
	} else {
 | 
			
		||||
		// Since this is the init process, always call into vmcompute.dll to
 | 
			
		||||
		// shutdown the container after we have completed.
 | 
			
		||||
 | 
			
		||||
	// If this is the init process, always call into vmcompute.dll to
 | 
			
		||||
	// shutdown the container after we have completed.
 | 
			
		||||
	if isFirstProcessToStart {
 | 
			
		||||
		propertyCheckFlag := 1 // Include update pending check.
 | 
			
		||||
		csProperties, err := hcsshim.GetComputeSystemProperties(ctr.containerID, uint32(propertyCheckFlag))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -196,7 +197,7 @@ func (ctr *container) waitExit(pid uint32, processFriendlyName string, isFirstPr
 | 
			
		|||
			logrus.Debugf("Completed shutting down container %s", ctr.containerID)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if si.State == StateExit && ctr.restartManager != nil {
 | 
			
		||||
		if !ctr.manualStopRequested && ctr.restartManager != nil {
 | 
			
		||||
			restart, wait, err := ctr.restartManager.ShouldRestart(uint32(exitCode), false, time.Since(ctr.startedAt))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				logrus.Error(err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue