Lock container while connecting to a new network.
`ConnectToNetwork` is modfying the container but is not locking the
object.
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
(cherry picked from commit 4d0888e32bccfd8c0f27a7b66b2a5607d42e2698)
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
diff --git a/daemon/container_operations.go b/daemon/container_operations.go
index 82ca470..1b6f02d 100644
--- a/daemon/container_operations.go
+++ b/daemon/container_operations.go
@@ -980,6 +980,9 @@
if endpointConfig == nil {
endpointConfig = &networktypes.EndpointSettings{}
}
+ container.Lock()
+ defer container.Unlock()
+
if !container.Running {
if container.RemovalInProgress || container.Dead {
return errRemovalContainer(container.ID)
@@ -1002,7 +1005,7 @@
return err
}
}
- if err := container.ToDiskLocking(); err != nil {
+ if err := container.ToDisk(); err != nil {
return fmt.Errorf("Error saving container to disk: %v", err)
}
return nil
@@ -1011,6 +1014,9 @@
// DisconnectFromNetwork disconnects container from network n.
func (daemon *Daemon) DisconnectFromNetwork(container *container.Container, networkName string, force bool) error {
n, err := daemon.FindNetwork(networkName)
+ container.Lock()
+ defer container.Unlock()
+
if !container.Running || (err != nil && force) {
if container.RemovalInProgress || container.Dead {
return errRemovalContainer(container.ID)
@@ -1038,7 +1044,7 @@
return err
}
- if err := container.ToDiskLocking(); err != nil {
+ if err := container.ToDisk(); err != nil {
return fmt.Errorf("Error saving container to disk: %v", err)
}