Browse code

when container had no layer data, cleanupContainer crashed

Signed-off-by: mYmNeo <thomassong@tencent.com>

mYmNeo authored on 2016/04/05 10:30:05
Showing 1 changed files
... ...
@@ -123,10 +123,14 @@ func (daemon *Daemon) cleanupContainer(container *container.Container, forceRemo
123 123
 		return fmt.Errorf("Unable to remove filesystem for %v: %v", container.ID, err)
124 124
 	}
125 125
 
126
-	metadata, err := daemon.layerStore.ReleaseRWLayer(container.RWLayer)
127
-	layer.LogReleaseMetadata(metadata)
128
-	if err != nil && err != layer.ErrMountDoesNotExist {
129
-		return fmt.Errorf("Driver %s failed to remove root filesystem %s: %s", daemon.GraphDriverName(), container.ID, err)
126
+	// When container creation fails and `RWLayer` has not been created yet, we
127
+	// do not call `ReleaseRWLayer`
128
+	if container.RWLayer != nil {
129
+		metadata, err := daemon.layerStore.ReleaseRWLayer(container.RWLayer)
130
+		layer.LogReleaseMetadata(metadata)
131
+		if err != nil && err != layer.ErrMountDoesNotExist {
132
+			return fmt.Errorf("Driver %s failed to remove root filesystem %s: %s", daemon.GraphDriverName(), container.ID, err)
133
+		}
130 134
 	}
131 135
 
132 136
 	return nil