FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Fix a race condition in TexManager.make_dvi. by anntzer · Pull Request #30426 · matplotlib/matplotlib · GitHub

Fix a race condition in TexManager.make_dvi. - #30426

Merged
timhoffm merged 1 commit into
matplotlib:mainfrom
anntzer:mdr
Aug 14, 2025
Merged

Fix a race condition in TexManager.make_dvi.#30426
timhoffm merged 1 commit into
matplotlib:mainfrom
anntzer:mdr

Conversation

anntzer commented Aug 14, 2025
edited
Loading

Copy link
Copy Markdown
Contributor

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

Comment thread lib/matplotlib/texmanager.py Outdated

tacaswell left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

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

tacaswell added this to the v3.10.6 milestone Aug 14, 2025

anntzer commented Aug 14, 2025

Copy link
Copy Markdown
Contributor Author

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

Comment thread lib/matplotlib/texmanager.py Outdated
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 commented Aug 14, 2025

Copy link
Copy Markdown
Contributor Author

I chose to also fix make_png here as well.

timhoffm merged commit be68dfe into matplotlib:main Aug 14, 2025
34 of 37 checks passed
meeseeksmachine pushed a commit to meeseeksmachine/matplotlib that referenced this pull request Aug 14, 2025
anntzer deleted the mdr branch August 14, 2025 21:11
anntzer mentioned this pull request Aug 15, 2025
5 tasks
anntzer added a commit to anntzer/matplotlib that referenced this pull request Aug 16, 2025
…_dvi & make_png.

Includes an extra fix from PR matplotlib#30431: Don't drop dpi in png filename
generation.
QuLogic added a commit that referenced this pull request Aug 18, 2025
Backport PR #30426: Fix a race condition in TexManager.make_dvi & make_png.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
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


Back | FazBrowse Home | New Git URL