Skip to content

Commit

Permalink
Merge pull request #43166 from thaJeztah/20.10_backport_fix_update_sync
Browse files Browse the repository at this point in the history
[20.10 backport] Fix for lack of syncronization in daemon/update.go
  • Loading branch information
cpuguy83 committed Feb 17, 2022
2 parents c9e1608 + b2684c1 commit 7f44d60
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions daemon/update.go
Expand Up @@ -42,20 +42,25 @@ func (daemon *Daemon) update(name string, hostConfig *container.HostConfig) erro

restoreConfig := false
backupHostConfig := *ctr.HostConfig

defer func() {
if restoreConfig {
ctr.Lock()
ctr.HostConfig = &backupHostConfig
ctr.CheckpointTo(daemon.containersReplica)
if !ctr.RemovalInProgress && !ctr.Dead {
ctr.HostConfig = &backupHostConfig
ctr.CheckpointTo(daemon.containersReplica)
}
ctr.Unlock()
}
}()

ctr.Lock()

if ctr.RemovalInProgress || ctr.Dead {
ctr.Unlock()
return errCannotUpdate(ctr.ID, fmt.Errorf("container is marked for removal and cannot be \"update\""))
}

ctr.Lock()
if err := ctr.UpdateContainer(hostConfig); err != nil {
restoreConfig = true
ctr.Unlock()
Expand All @@ -66,6 +71,7 @@ func (daemon *Daemon) update(name string, hostConfig *container.HostConfig) erro
ctr.Unlock()
return errCannotUpdate(ctr.ID, err)
}

ctr.Unlock()

// if Restart Policy changed, we need to update container monitor
Expand Down

0 comments on commit 7f44d60

Please sign in to comment.