Skip to content

Fix a race condition in TexManager.make_dvi. #30426

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

anntzer
Copy link
Contributor

@anntzer anntzer commented Aug 14, 2025

Previously, a race condition could occur if, while a process had called make_tex (generating the tex file in the global cache) and was going to call the latex subprocess (to generate the dvi file), another process also called make_tex for the same tex string and started rewriting the tex source. In that case, the latex subprocess could see a partially written (invalid) tex source.

Fix that by generating the tex source in a process-private temporary directory, where the latex process is already going to run anyways. (This is cheap compared to the latex subprocess invocation.)

See #30420 (comment) (point (2)).

PR summary

PR checklist

Previously, a race condition could occur if, while a process had called
make_tex (generating the tex file in the global cache) and was going to
call the latex subprocess (to generate the dvi file), another process
also called make_tex for the same tex string and started rewriting the
tex source.  In that case, the latex subprocess could see a partially
written (invalid) tex source.

Fix that by generating the tex source in a process-private temporary
directory, where the latex process is already going to run anyways.
(This is cheap compared to the latex subprocess invocation.)
@@ -296,12 +298,12 @@ def make_dvi(cls, tex, fontsize):
# will be blocked when `openin_any = p` in texmf.cnf).
cwd = Path(dvifile).parent
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need this any more?

Copy link
Member

@tacaswell tacaswell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there is an unused local, but otherwise good to merge.

@tacaswell tacaswell added this to the v3.10.6 milestone Aug 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants