summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/Build/2024-05-11-15-11-30.gh-issue-118943.VI_MnY.rst3
-rw-r--r--Tools/jit/_targets.py19
2 files changed, 15 insertions, 7 deletions
diff --git a/Misc/NEWS.d/next/Build/2024-05-11-15-11-30.gh-issue-118943.VI_MnY.rst b/Misc/NEWS.d/next/Build/2024-05-11-15-11-30.gh-issue-118943.VI_MnY.rst
new file mode 100644
index 0000000..4e886be
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2024-05-11-15-11-30.gh-issue-118943.VI_MnY.rst
@@ -0,0 +1,3 @@
+Fix a possible race condition affecting parallel builds configured with
+``--enable-experimental-jit``, in which compilation errors could be caused
+by an incompletely-generated header file.
diff --git a/Tools/jit/_targets.py b/Tools/jit/_targets.py
index b020f49..5604c42 100644
--- a/Tools/jit/_targets.py
+++ b/Tools/jit/_targets.py
@@ -212,13 +212,18 @@ class _Target(typing.Generic[_S, _R]):
):
return
stencil_groups = asyncio.run(self._build_stencils())
- with jit_stencils.open("w") as file:
- file.write(digest)
- if comment:
- file.write(f"// {comment}\n\n")
- file.write("")
- for line in _writer.dump(stencil_groups):
- file.write(f"{line}\n")
+ jit_stencils_new = out / "jit_stencils.h.new"
+ try:
+ with jit_stencils_new.open("w") as file:
+ file.write(digest)
+ if comment:
+ file.write(f"// {comment}\n")
+ file.write("\n")
+ for line in _writer.dump(stencil_groups):
+ file.write(f"{line}\n")
+ jit_stencils_new.replace(jit_stencils)
+ finally:
+ jit_stencils_new.unlink(missing_ok=True)
class _COFF(