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)).

Edit: did the same to make_png.

PR summary

PR checklist

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
@anntzer
Copy link
Contributor Author

anntzer commented Aug 14, 2025

It's still used by the TemporaryDirectory call.
(By the way, would you agree with the more general patch at #30420 (comment)?)

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.)

Apply a similar strategy for make_png as well.
@anntzer
Copy link
Contributor Author

anntzer commented Aug 14, 2025

I chose to also fix make_png here as well.

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.

3 participants