Browse Source

Fix race in host sandbox creation

Since we share the host sandbox with many containers we
need to serialize creation of the sandbox. Otherwise
container starts may see the namespace path in inconsistent
state.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
Jana Radhakrishnan 9 years ago
parent
commit
6c23d4073f
1 changed files with 2 additions and 1 deletions
  1. 2 1
      libnetwork/controller.go

+ 2 - 1
libnetwork/controller.go

@@ -507,13 +507,14 @@ func (c *controller) NewSandbox(containerID string, options ...SandboxOption) (S
 		return nil, err
 		return nil, err
 	}
 	}
 
 
+	c.Lock()
 	if sb.osSbox == nil && !sb.config.useExternalKey {
 	if sb.osSbox == nil && !sb.config.useExternalKey {
 		if sb.osSbox, err = osl.NewSandbox(sb.Key(), !sb.config.useDefaultSandBox); err != nil {
 		if sb.osSbox, err = osl.NewSandbox(sb.Key(), !sb.config.useDefaultSandBox); err != nil {
+			c.Unlock()
 			return nil, fmt.Errorf("failed to create new osl sandbox: %v", err)
 			return nil, fmt.Errorf("failed to create new osl sandbox: %v", err)
 		}
 		}
 	}
 	}
 
 
-	c.Lock()
 	c.sandboxes[sb.id] = sb
 	c.sandboxes[sb.id] = sb
 	c.Unlock()
 	c.Unlock()
 	defer func() {
 	defer func() {