Merge pull request #6979 from LK4D4/fix_race_inspect_start

Use container.Lock in public ToDisk method
Upstream-commit: c3f247860aa169f4a9530d025da935d71af72f20
Component: engine
This commit is contained in:
Michael Crosby
2014-07-11 13:44:01 -07:00
+10 -3
View File
@@ -106,7 +106,7 @@ func (container *Container) FromDisk() error {
return container.readHostConfig()
}
func (container *Container) ToDisk() error {
func (container *Container) toDisk() error {
data, err := json.Marshal(container)
if err != nil {
return err
@@ -125,6 +125,13 @@ func (container *Container) ToDisk() error {
return container.WriteHostConfig()
}
func (container *Container) ToDisk() error {
container.Lock()
err := container.toDisk()
container.Unlock()
return err
}
func (container *Container) readHostConfig() error {
container.hostConfig = &runconfig.HostConfig{}
// If the hostconfig file does not exist, do not read it.
@@ -496,7 +503,7 @@ func (container *Container) monitor(callback execdriver.StartCallback) error {
// FIXME: here is race condition between two RUN instructions in Dockerfile
// because they share same runconfig and change image. Must be fixed
// in server/buildfile.go
if err := container.ToDisk(); err != nil {
if err := container.toDisk(); err != nil {
utils.Errorf("Error dumping container %s state to disk: %s\n", container.ID, err)
}
}
@@ -1095,7 +1102,7 @@ func (container *Container) waitForStart() error {
c.Close()
}
}
if err := container.ToDisk(); err != nil {
if err := container.toDisk(); err != nil {
utils.Debugf("%s", err)
}
container.State.SetRunning(command.Pid())