summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Crowe <mac@mcrowe.com>2015-11-19 11:48:26 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-12-01 21:30:53 +0000
commite3f216eef1b7a8ecfd00317e60704cff472238ba (patch)
tree98bee5d555b466a53d8a49960edaa9c9b202c80e
parent11f1956cf5d732cfed6d28c8c292b5053966895c (diff)
downloadopenembedded-core-e3f216eef1b7a8ecfd00317e60704cff472238ba.tar.gz
openembedded-core-e3f216eef1b7a8ecfd00317e60704cff472238ba.tar.bz2
openembedded-core-e3f216eef1b7a8ecfd00317e60704cff472238ba.zip
image.py: avoid mkdir race when building multiple images
If multiple images are being built simultaneously against the same sysroot then the call to os.makedirs in Image._write_wic_env can fail with: File: '.../meta/lib/oe/image.py', lineno: 341, function: _write_wic_env 0337: """ 0338: stdir = self.d.getVar('STAGING_DIR_TARGET', True) 0339: outdir = os.path.join(stdir, 'imgdata') 0340: if not os.path.exists(outdir): *** 0341: os.makedirs(outdir) 0342: basename = self.d.getVar('IMAGE_BASENAME', True) 0343: with open(os.path.join(outdir, basename) + '.env', 'w') as envf: 0344: for var in self.d.getVar('WICVARS', True).split(): 0345: value = self.d.getVar(var, True) File: '/usr/lib/python2.7/os.py', lineno: 157, function: makedirs 0153: if e.errno != errno.EEXIST: 0154: raise 0155: if tail == curdir: # xxx/newdir/. exists if xxx/newdir exists 0156: return *** 0157: mkdir(name, mode) 0158: 0159:def removedirs(name): 0160: """removedirs(path) 0161: Exception: OSError: [Errno 17] File exists: '.../tmp-glibc/sysroots/cheetah/imgdata' Using bb.utils.mkdirhier() protects against this. There's also little point in checking to see if the directory already exists - we might as well just try and create it regardless. Once the directory has been created, there's no race on the actual file since the filename contains IMAGE_BASENAME. Signed-off-by: Mike Crowe <mac@mcrowe.com> Signed-off-by: Ross Burton <ross.burton@intel.com>
-rw-r--r--meta/lib/oe/image.py3
1 files changed, 1 insertions, 2 deletions
diff --git a/meta/lib/oe/image.py b/meta/lib/oe/image.py
index f0843de928..52ac1e752c 100644
--- a/meta/lib/oe/image.py
+++ b/meta/lib/oe/image.py
@@ -341,8 +341,7 @@ class Image(ImageDepGraph):
stdir = self.d.getVar('STAGING_DIR_TARGET', True)
outdir = os.path.join(stdir, 'imgdata')
- if not os.path.exists(outdir):
- os.makedirs(outdir)
+ bb.utils.mkdirhier(outdir)
basename = self.d.getVar('IMAGE_BASENAME', True)
with open(os.path.join(outdir, basename) + '.env', 'w') as envf:
for var in wicvars.split():