From 811b138f7e6c742b821da15e34338651f33f9ec2 Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Wed, 21 Jan 2015 12:04:43 -0500 Subject: [PATCH] Fix call to nil stat Fixes #10242 Signed-off-by: Brian Goff --- daemon/start.go | 2 ++ volumes/volume.go | 26 ++++++-------------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/daemon/start.go b/daemon/start.go index 363461080f..d6655189d7 100644 --- a/daemon/start.go +++ b/daemon/start.go @@ -53,6 +53,8 @@ func (daemon *Daemon) setHostConfig(container *Container, hostConfig *runconfig. if err := parseSecurityOpt(container, hostConfig); err != nil { return err } + + // FIXME: this should be handled by the volume subsystem // Validate the HostConfig binds. Make sure that: // the source exists for _, bind := range hostConfig.Binds { diff --git a/volumes/volume.go b/volumes/volume.go index db99aed5dc..8041160cee 100644 --- a/volumes/volume.go +++ b/volumes/volume.go @@ -86,30 +86,14 @@ func (v *Volume) AddContainer(containerId string) { v.lock.Unlock() } -func (v *Volume) createIfNotExist() error { - if stat, err := os.Stat(v.Path); err != nil && os.IsNotExist(err) { - if stat.IsDir() { - os.MkdirAll(v.Path, 0755) - } - - if err := os.MkdirAll(filepath.Dir(v.Path), 0755); err != nil { - return err - } - f, err := os.OpenFile(v.Path, os.O_CREATE, 0755) - if err != nil { - return err - } - f.Close() - } - return nil -} - func (v *Volume) initialize() error { v.lock.Lock() defer v.lock.Unlock() - if err := v.createIfNotExist(); err != nil { - return err + if _, err := os.Stat(v.Path); err != nil && os.IsNotExist(err) { + if err := os.MkdirAll(v.Path, 0755); err != nil { + return err + } } if err := os.MkdirAll(v.configPath, 0755); err != nil { @@ -133,6 +117,7 @@ func (v *Volume) ToDisk() error { defer v.lock.Unlock() return v.toDisk() } + func (v *Volume) toDisk() error { data, err := json.Marshal(v) if err != nil { @@ -146,6 +131,7 @@ func (v *Volume) toDisk() error { return ioutil.WriteFile(pth, data, 0666) } + func (v *Volume) FromDisk() error { v.lock.Lock() defer v.lock.Unlock()