From ee4293400cff1d5f9a7a6dd8e9aaa6ba6623e348 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Sat, 16 Apr 2011 18:53:59 +0200 Subject: [PATCH] Fix possible "file already exists" error when running the tests in parallel. This is a perfect example of LBYL going wrong: that code could be executed by several workers in parallel, and os.mkdir() attempted on the same path by multiple processes. --- Lib/test/regrtest.py | 6 +++++- Misc/NEWS | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index 89acb9b0a9d..e2e37652cc0 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -162,6 +162,7 @@ import re import io import sys import time +import errno import traceback import warnings import unittest @@ -1511,8 +1512,11 @@ def _make_temp_dir_for_build(TEMPDIR): if sysconfig.is_python_build(): TEMPDIR = os.path.join(sysconfig.get_config_var('srcdir'), 'build') TEMPDIR = os.path.abspath(TEMPDIR) - if not os.path.exists(TEMPDIR): + try: os.mkdir(TEMPDIR) + except OSError as e: + if e.errno != errno.EEXIST: + raise # Define a writable temp dir that will be used as cwd while running # the tests. The name of the dir includes the pid to allow parallel diff --git a/Misc/NEWS b/Misc/NEWS index 01b5119b0dd..f5f08e431b0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -269,6 +269,8 @@ Extensions Tests ----- +- Fix possible "file already exists" error when running the tests in parallel. + - Issue #11719: Fix message about unexpected test_msilib skip on non-Windows platforms. Patch by Nadeem Vawda.