docker/patch/0203-docker-Fix-for-lack-of-syncromization-in-daemon-update.go.patch

57 lines
1.8 KiB
Diff
Raw Normal View History

2022-06-28 16:29:12 +08:00
From fa960e384ada593add8e14c4cbc4da5a4ebf095e Mon Sep 17 00:00:00 2001
From: chenjiankun <chenjiankun1@huawei.com>
Date: Fri, 16 Apr 2021 19:49:45 +0800
Subject: [PATCH] docker: [backport] Fix for lack of synchronization in daemon/update.go
Conflict:NA
Reference:https://github.com/moby/moby/pull/41999/commits/58825ffc3243f13795b36f430726ae8e3e14bed0
---
components/engine/daemon/update.go | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/components/engine/daemon/update.go b/components/engine/daemon/update.go
index 0ebb139d3..b38db991b 100644
--- a/components/engine/daemon/update.go
+++ b/components/engine/daemon/update.go
@@ -42,20 +42,25 @@ func (daemon *Daemon) update(name string, hostConfig *container.HostConfig) erro
restoreConfig := false
backupHostConfig := *container.HostConfig
+
defer func() {
if restoreConfig {
container.Lock()
- container.HostConfig = &backupHostConfig
- container.CheckpointTo(daemon.containersReplica)
+ if !container.RemovalInProgress && !container.Dead {
+ container.HostConfig = &backupHostConfig
+ container.CheckpointTo(daemon.containersReplica)
+ }
container.Unlock()
}
}()
+ container.Lock()
+
if container.RemovalInProgress || container.Dead {
+ container.Unlock()
return errCannotUpdate(container.ID, fmt.Errorf("container is marked for removal and cannot be \"update\""))
}
- container.Lock()
if err := container.UpdateContainer(hostConfig); err != nil {
restoreConfig = true
container.Unlock()
@@ -66,6 +71,7 @@ func (daemon *Daemon) update(name string, hostConfig *container.HostConfig) erro
container.Unlock()
return errCannotUpdate(container.ID, err)
}
+
container.Unlock()
// if Restart Policy changed, we need to update container monitor
--
2.27.0