From 6db1c40b374ecdf7324fa123db4c2202d4f986c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles-Fran=C3=A7ois=20Natali?= Date: Wed, 22 Feb 2012 21:03:09 +0100 Subject: [PATCH] Issue #14077: importlib: Fix regression introduced by de6703671386. --- Lib/importlib/_bootstrap.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index f70869eac07..d10ab2f1f4d 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -128,7 +128,9 @@ def _path_absolute(path): def _write_atomic(path, data): - """Function to write data to a path atomically.""" + """Best-effort function to write data to a path atomically. + Be prepared to handle a FileExistsError if concurrent writing of the + temporary file is attempted.""" # id() is used to generate a pseudo-random filename. path_tmp = '{}.{}'.format(path, id(path)) fd = _os.open(path_tmp, _os.O_EXCL | _os.O_CREAT | _os.O_WRONLY, 0o666) @@ -595,8 +597,9 @@ class _SourceFileLoader(_FileLoader, SourceLoader): return try: _write_atomic(path, data) - except PermissionError: - # Don't worry if you can't write bytecode. + except (PermissionError, FileExistsError): + # Don't worry if you can't write bytecode or someone is writing + # it at the same time. pass