summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-04-16 16:53:59 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2011-04-16 16:53:59 (GMT)
commitee4293400cff1d5f9a7a6dd8e9aaa6ba6623e348 (patch)
tree579ae44f65b5632aeb744f56446f0dfadce0c1c3
parent1d827ff43d6340db759ddc08c6ab1efa3e1886d1 (diff)
downloadcpython-ee4293400cff1d5f9a7a6dd8e9aaa6ba6623e348.zip
cpython-ee4293400cff1d5f9a7a6dd8e9aaa6ba6623e348.tar.gz
cpython-ee4293400cff1d5f9a7a6dd8e9aaa6ba6623e348.tar.bz2
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.
-rwxr-xr-xLib/test/regrtest.py6
-rw-r--r--Misc/NEWS2
2 files changed, 7 insertions, 1 deletions
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 89acb9b..e2e3765 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 01b5119..f5f08e4 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.