]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-118943: Handle races when moving jit_stencils.h (GH-120690)
authorMiro Hrončok <miro@hroncok.cz>
Mon, 5 Aug 2024 23:10:40 +0000 (01:10 +0200)
committerGitHub <noreply@github.com>
Mon, 5 Aug 2024 23:10:40 +0000 (16:10 -0700)
Co-authored-by: Kirill Podoprigora <kirill.bast9@mail.ru>
Misc/NEWS.d/next/Build/2024-06-18-15-28-25.gh-issue-118943.aie7nn.rst [new file with mode: 0644]
Tools/jit/_targets.py

diff --git a/Misc/NEWS.d/next/Build/2024-06-18-15-28-25.gh-issue-118943.aie7nn.rst b/Misc/NEWS.d/next/Build/2024-06-18-15-28-25.gh-issue-118943.aie7nn.rst
new file mode 100644 (file)
index 0000000..997c990
--- /dev/null
@@ -0,0 +1,3 @@
+Fix a possible race condition affecting parallel builds configured with
+``--enable-experimental-jit``, in which :exc:`FileNotFoundError` could be caused by
+another process already moving ``jit_stencils.h.new`` to ``jit_stencils.h``.
index 5604c429bcf8ad8f29f1ea0b03aab48ab2d93353..73d10a128756eb1cb52fead6a528d1ef91d835e8 100644 (file)
@@ -221,7 +221,12 @@ class _Target(typing.Generic[_S, _R]):
                 file.write("\n")
                 for line in _writer.dump(stencil_groups):
                     file.write(f"{line}\n")
-            jit_stencils_new.replace(jit_stencils)
+            try:
+                jit_stencils_new.replace(jit_stencils)
+            except FileNotFoundError:
+                # another process probably already moved the file
+                if not jit_stencils.is_file():
+                    raise
         finally:
             jit_stencils_new.unlink(missing_ok=True)