From 94d39f6e91069c535f9799ae94f71e4bd9b6622e Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Fri, 19 May 2017 21:36:54 +0300 Subject: [PATCH] Fix matchcompiler failure in case of parallel build During parallel build, multiple processes will try to create build_dir in parallel, so the build will fail. Fix that by calling makedirs unconditionally and ignoring errors from it. If there's actual problem with directory creation, it'll be caught later by isdir() check. --- tools/matchcompiler.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tools/matchcompiler.py b/tools/matchcompiler.py index 71f176d59..2ba36b29f 100755 --- a/tools/matchcompiler.py +++ b/tools/matchcompiler.py @@ -22,6 +22,7 @@ import sys import re import glob import argparse +import errno class MatchCompiler: @@ -667,8 +668,16 @@ def main(): sys.exit(-1) # Create build directory if needed - if not os.path.exists(build_dir): + try: os.makedirs(build_dir) + except OSError as e: + # due to race condition in case of parallel build, + # makedirs may fail. Ignore that; if there's actual + # problem with directory creation, it'll be caught + # by the following isdir check + if e.errno != errno.EEXIST: + raise + if not os.path.isdir(build_dir): raise Exception(build_dir + ' is not a directory')