fixes races between list and create
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
| ... | ... |
@@ -74,8 +74,8 @@ func (daemon *Daemon) create(params types.ContainerCreateConfig) (retC *containe |
| 74 | 74 |
} |
| 75 | 75 |
defer func() {
|
| 76 | 76 |
if retErr != nil {
|
| 77 |
- if err := daemon.ContainerRm(container.ID, &types.ContainerRmConfig{ForceRemove: true}); err != nil {
|
|
| 78 |
- logrus.Errorf("Clean up Error! Cannot destroy container %s: %v", container.ID, err)
|
|
| 77 |
+ if err := daemon.cleanupContainer(container, true); err != nil {
|
|
| 78 |
+ logrus.Errorf("failed to cleanup container on create error: %v", err)
|
|
| 79 | 79 |
} |
| 80 | 80 |
} |
| 81 | 81 |
}() |
| ... | ... |
@@ -91,9 +91,6 @@ func (daemon *Daemon) create(params types.ContainerCreateConfig) (retC *containe |
| 91 | 91 |
return nil, err |
| 92 | 92 |
} |
| 93 | 93 |
|
| 94 |
- if err := daemon.Register(container); err != nil {
|
|
| 95 |
- return nil, err |
|
| 96 |
- } |
|
| 97 | 94 |
rootUID, rootGID, err := idtools.GetRootUIDGID(daemon.uidMaps, daemon.gidMaps) |
| 98 | 95 |
if err != nil {
|
| 99 | 96 |
return nil, err |
| ... | ... |
@@ -126,10 +123,13 @@ func (daemon *Daemon) create(params types.ContainerCreateConfig) (retC *containe |
| 126 | 126 |
return nil, err |
| 127 | 127 |
} |
| 128 | 128 |
|
| 129 |
- if err := container.ToDiskLocking(); err != nil {
|
|
| 129 |
+ if err := container.ToDisk(); err != nil {
|
|
| 130 | 130 |
logrus.Errorf("Error saving new container to disk: %v", err)
|
| 131 | 131 |
return nil, err |
| 132 | 132 |
} |
| 133 |
+ if err := daemon.Register(container); err != nil {
|
|
| 134 |
+ return nil, err |
|
| 135 |
+ } |
|
| 133 | 136 |
daemon.LogContainerEvent(container, "create") |
| 134 | 137 |
return container, nil |
| 135 | 138 |
} |