Skip to content

[3.15] gh-153056: Fix a data race compiling the string.Template pattern in free-threading builds (GH-153057)#153302

Merged
warsaw merged 1 commit into
python:3.15from
miss-islington:backport-4572903-3.15
Jul 8, 2026
Merged

[3.15] gh-153056: Fix a data race compiling the string.Template pattern in free-threading builds (GH-153057)#153302
warsaw merged 1 commit into
python:3.15from
miss-islington:backport-4572903-3.15

Conversation

@miss-islington

Copy link
Copy Markdown
Contributor

Template compiles its substitution pattern lazily and caches it on the class. On the free-threaded build two concurrent first uses could race: a thread that observed the pattern another thread had just compiled would try to recompile it, and re.compile() rejects flags on an already-compiled pattern, raising a spurious ValueError. Return the already-compiled pattern instead.

As a side effect, a subclass that supplies an already-compiled pattern now works too; previously it raised the same ValueError at class definition.

  • Trim test comments and NEWS wording

  • Document that the pattern attribute accepts a string or a compiled regex

  • Comment the three states of pattern and note the documented-behavior fix in NEWS

  • Update Doc/library/string.rst


(cherry picked from commit 4572903)

Co-authored-by: tonghuaroot (童话) tonghuaroot@gmail.com
Co-authored-by: Barry Warsaw barry@python.org

…n in free-threading builds (pythonGH-153057)

* pythongh-153056: Fix a data race compiling the string.Template pattern in free-threading builds

Template compiles its substitution pattern lazily and caches it on the class.  On the free-threaded build two concurrent first uses could race: a thread that observed the pattern another thread had just compiled would try to recompile it, and re.compile() rejects flags on an already-compiled pattern, raising a spurious ValueError.  Return the already-compiled pattern instead.

As a side effect, a subclass that supplies an already-compiled pattern now works too; previously it raised the same ValueError at class definition.

* Trim test comments and NEWS wording

* Document that the pattern attribute accepts a string or a compiled regex

* Comment the three states of pattern and note the documented-behavior fix in NEWS

* Update Doc/library/string.rst

---------
(cherry picked from commit 45729033bff28f8abc36c42e802cb2853c205737)

Co-authored-by: tonghuaroot (童话) <tonghuaroot@gmail.com>
Co-authored-by: Barry Warsaw <barry@python.org>
@read-the-docs-community

Copy link
Copy Markdown

@warsaw warsaw merged commit e597358 into python:3.15 Jul 8, 2026
55 checks passed
@miss-islington miss-islington deleted the backport-4572903-3.15 branch July 8, 2026 01:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants