From 114be249f022535f0800bd45987c4e9cd1b321a4 Mon Sep 17 00:00:00 2001 From: Alexander Morozov Date: Tue, 29 Mar 2016 13:52:18 -0700 Subject: [PATCH] daemon: register container as late as possible fixes races between list and create Signed-off-by: Alexander Morozov --- daemon/create.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/daemon/create.go b/daemon/create.go index 9246453a0a..18203fe2b4 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -74,8 +74,8 @@ func (daemon *Daemon) create(params types.ContainerCreateConfig) (retC *containe } defer func() { if retErr != nil { - if err := daemon.ContainerRm(container.ID, &types.ContainerRmConfig{ForceRemove: true}); err != nil { - logrus.Errorf("Clean up Error! Cannot destroy container %s: %v", container.ID, err) + if err := daemon.cleanupContainer(container, true); err != nil { + logrus.Errorf("failed to cleanup container on create error: %v", err) } } }() @@ -91,9 +91,6 @@ func (daemon *Daemon) create(params types.ContainerCreateConfig) (retC *containe return nil, err } - if err := daemon.Register(container); err != nil { - return nil, err - } rootUID, rootGID, err := idtools.GetRootUIDGID(daemon.uidMaps, daemon.gidMaps) if err != nil { return nil, err @@ -126,10 +123,13 @@ func (daemon *Daemon) create(params types.ContainerCreateConfig) (retC *containe return nil, err } - if err := container.ToDiskLocking(); err != nil { + if err := container.ToDisk(); err != nil { logrus.Errorf("Error saving new container to disk: %v", err) return nil, err } + if err := daemon.Register(container); err != nil { + return nil, err + } daemon.LogContainerEvent(container, "create") return container, nil }