mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Fix for lack of syncromization in daemon/update.go
Signed-off-by: dmytro.iakovliev <dmytro.iakovliev@zodiacsystems.com>
This commit is contained in:
parent
791640417b
commit
58825ffc32
1 changed files with 9 additions and 3 deletions
|
@ -42,20 +42,25 @@ func (daemon *Daemon) update(name string, hostConfig *container.HostConfig) erro
|
||||||
|
|
||||||
restoreConfig := false
|
restoreConfig := false
|
||||||
backupHostConfig := *ctr.HostConfig
|
backupHostConfig := *ctr.HostConfig
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if restoreConfig {
|
if restoreConfig {
|
||||||
ctr.Lock()
|
ctr.Lock()
|
||||||
ctr.HostConfig = &backupHostConfig
|
if !ctr.RemovalInProgress && !ctr.Dead {
|
||||||
ctr.CheckpointTo(daemon.containersReplica)
|
ctr.HostConfig = &backupHostConfig
|
||||||
|
ctr.CheckpointTo(daemon.containersReplica)
|
||||||
|
}
|
||||||
ctr.Unlock()
|
ctr.Unlock()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
ctr.Lock()
|
||||||
|
|
||||||
if ctr.RemovalInProgress || ctr.Dead {
|
if ctr.RemovalInProgress || ctr.Dead {
|
||||||
|
ctr.Unlock()
|
||||||
return errCannotUpdate(ctr.ID, fmt.Errorf("container is marked for removal and cannot be \"update\""))
|
return errCannotUpdate(ctr.ID, fmt.Errorf("container is marked for removal and cannot be \"update\""))
|
||||||
}
|
}
|
||||||
|
|
||||||
ctr.Lock()
|
|
||||||
if err := ctr.UpdateContainer(hostConfig); err != nil {
|
if err := ctr.UpdateContainer(hostConfig); err != nil {
|
||||||
restoreConfig = true
|
restoreConfig = true
|
||||||
ctr.Unlock()
|
ctr.Unlock()
|
||||||
|
@ -66,6 +71,7 @@ func (daemon *Daemon) update(name string, hostConfig *container.HostConfig) erro
|
||||||
ctr.Unlock()
|
ctr.Unlock()
|
||||||
return errCannotUpdate(ctr.ID, err)
|
return errCannotUpdate(ctr.ID, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctr.Unlock()
|
ctr.Unlock()
|
||||||
|
|
||||||
// if Restart Policy changed, we need to update container monitor
|
// if Restart Policy changed, we need to update container monitor
|
||||||
|
|
Loading…
Reference in a new issue