mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Lock container when deleting its root directory
Attempting to delete the directory while another goroutine is concurrently executing a CheckpointTo() can fail on Windows due to file locking. As all callers of CheckpointTo() are required to hold the container lock, holding the lock while deleting the directory ensures that there will be no interference. Signed-off-by: Cory Snider <csnider@mirantis.com>
This commit is contained in:
parent
6a2f385aea
commit
18e322bc7c
1 changed files with 8 additions and 1 deletions
|
@ -138,7 +138,14 @@ func (daemon *Daemon) cleanupContainer(container *container.Container, config ty
|
|||
container.RWLayer = nil
|
||||
}
|
||||
|
||||
if err := containerfs.EnsureRemoveAll(container.Root); err != nil {
|
||||
// Hold the container lock while deleting the container root directory
|
||||
// so that other goroutines don't attempt to concurrently open files
|
||||
// within it. Having any file open on Windows (without the
|
||||
// FILE_SHARE_DELETE flag) will block it from being deleted.
|
||||
container.Lock()
|
||||
err := containerfs.EnsureRemoveAll(container.Root)
|
||||
container.Unlock()
|
||||
if err != nil {
|
||||
err = errors.Wrapf(err, "unable to remove filesystem for %s", container.ID)
|
||||
container.SetRemovalError(err)
|
||||
return err
|
||||
|
|
Loading…
Add table
Reference in a new issue